java容器 -- list的总结
2016-09-18 08:40
267 查看
在我们的编程过程中,会遇到很多和容器类打交道的情况。这里就一些简单的常用的list相关的信息总结如下。
基本使用
1.正常使用
代码如下:public class ListTest { public static void main(String[] args) { List<String> l = new ArrayList<String>(); l.add("hello"); l.add("you"); l.add("hello"); l.add("hello"); dropLastTest(l); dropLastTest(l); seeAllWithIterator(l); seeAllWithFor(l); } //删除第一个hello. public static void dropFirstTest(List<String> l){ System.out.println("drop first hello:"); l.remove("hello"); System.out.println(l); } //删除最后一个hello. public static void dropLastTest(List<String> l){ System.out.println("drop last hello:"); l.remove(l.lastIndexOf("hello")); System.out.println(l); } //删除中间某个hello.通过计数的方式,在程序中实现。(删除第二个hello)【不写】 //通过迭代器(Iterator)遍历列表 public static void seeAllWithIterator(List<String> l){ System.out.println("iterator :"); Iterator<String> it = l.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } //通过for循环来实现遍历 public static void seeAllWithFor(List<String> l){ System.out.println("see all with for cycle :"); for(int i =0;i < l.size();i++){ System.out.println(l.get(i)); } } }
输出结果如下:
drop last hello:
[hello, you, hello]
drop last hello:
[hello, you]
iterator :
hello
you
see all with for cycle :
hello
you
2.删除list中所有值为x的元素
这里主要是删除所有的“hello”。方式1:(Iterator方式)
//clear all the "hello" public static void removeAllRelated1(List<String> l){ Iterator<String> it = l.iterator(); while(it.hasNext()){ if(it.next().equals("hello")){ it.remove(); } } System.out.println(l); }
方式2:(removeAll的使用)
public static void removeAllRelated2(List<String> l){ Iterator<String> it = l.iterator(); List<String> tobeDeleted = new ArrayList<String>(); while(it.hasNext()){ String tmp = it.next(); if(tmp.equals("hello")){ tobeDeleted.add(tmp); } } l.removeAll(tobeDeleted); System.out.println(l); }
上面两种方式,结果都是:
[you]
3.一些需要注意的问题
(1)当利用for循环遍历时,如果进行插入删除操作,可能会使一些元素被多次访问,或者是 不被访问。比如说,下面的代码:
假设下面方法的参数l中只有两个元素:“hello”,”you”.
//关于for循环存在的缺陷。 public static void testForError(List<String> l){ //尝试在for 循环中跳过you. //模拟在遍历过程中插入的场景。 System.out.println("some error with for cycle :"); //l.size()每次都会重新算一遍。 //l中一旦把某个元素删除了,后面的就会补上去。 for(int i =0;i < l.size();i++){ if(i == 0){ l.remove(i); l.add("added"); } System.out.println(l.get(i)); } }
结果如下:
当删除0位置上的元素的时候,后面的you补了上去。(此时,l.size() 为1)
当插入元素”added”的时候,放到了原来you 的位置,也就是位置1.(此时 ,l.size( )为2)
虽然l.size()变了,但是 i 的内容是不会随 l 的大小而变化的。
you
added
结论:
不建议在遍历的时候,通过list的方式删除数据,容易造成混乱。
4.Iterator的使用
迭代器,也可以成为游标。包含的基本方法:
hasNext();
next();
remove();
PS:
- 可以看出Iterator是专门针对某种形式的遍历而设计的,所以其有着简洁的原则。
- 【职责单一】这样体现了职责单一的特点。(只允许遍历,以及删除当前元素)
- 【只能前进,不能后退】
-【无冗余】 Iterator在遍历过程中,不具有置到初始位置的功能。
(2)使用迭代器遍历时也会出现一些错误。
见:http://blog.csdn.net/thesnowboy_2/article/details/52567101
5.list相关转化
list转化为数组
使用List 的 public T[] toArray(T[] a) 方法。ArrayList<String> list=new ArrayList<String>(); String[] strings = new String[list.size()]; list.toArray(strings);
数组转化为list.
使用Arrays的 aslist方法。String[] s = {"1","b","hello"}; List list = java.util.Arrays.asList(s);
相关文章推荐
- java-----容器类总结之ArrayList与LinkedList的区别
- java中的容器类和接口总结(二):List
- java中三种容器接口List .Set .Map 及其java容器总结
- Java容器(八):List接口总结
- java中set/map/list/vector 的总结
- JAVA的容器---List,Map,Set
- java容器List和set的分析
- JAVA的容器---List,Map,Set
- [摘]JAVA的容器---List Map Set
- JAVA的容器---List,Map,Set
- Java标准类库提供的容器总结
- JAVA的容器---List,Map,Set
- java 中 set map table list 的总结
- Java中集合容器类List和Set的用法
- Java数组与容器类分析资料--数组、List和Set、Map等
- JAVA的容器---List Map Set
- java.util.List 常用总结
- java容器中list和set总结
- JAVA的容器---List,Map,Set
- JAVA的容器---List Map Set