在工作中,经常会需要读取list数据。总结下平时工作中用到的一些方法。
首先来聚个简单地LIst例子。以及他们之间的区别:
实际案例:
方法一:使用for获取
package test.java;
import java.util.ArrayList;
import java.util.List;
public class LIstTest {
publicstatic void main(String[] args) {
List test =new ArrayList();
test.add("a");
test.add("b");
test.add("c");
//for
for(int i =0; i < test.size(); i++){
System.out.println("List第" + i + "位是:" + test.get(i));
}
}
}
方法二:foreach获取
package test.java;
import java.util.ArrayList;
import java.util.List;
public class LIstTest {
publicstatic void main(String[] args) {
List test =new ArrayList();
test.add("a");
test.add("b");
test.add("c");
//foreach
for(String s: test){
System.out.println(s);
}
}
}
方法三:Iterator迭代器
package test.java;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class LIstTest {
publicstatic void main(String[] args) {
List test =new ArrayList();
test.add("a");
test.add("b");
test.add("c");
//Iterator
Iterator it= test.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
上面都是获取List案例,为什么会出现那么多方式呢?他们之间又有什么相同点和区别呢?
相同点相信都知道,那就是遍历List数组。
那么不同点主要有:
1、形式上的不同:
for:for(int i = 0; i < test.size(); i++)
foreach: for(String s : test)
Iterator: Iterator it = test.iterator();
while(it.hasNext())
2、条件不同:
for:for需要知道List集合(数组)的长度,逐个有序遍历。
foreach:foreach和Iterator虽然不需要知道数组长度,但是foreach需要知道List集合内元素类型,都是获取到元素之后再处理。
3、多态差别:
for:for和foreach都需要知道集合类型,甚至是集合内部元素类型,所以访问内部元素时,不能实现多态。
Iterator:Iterator是一个接口类型,他不关心集合或者数组类型,并且可以随时删除修改集合元素。当我们需要遍历不同的集合时,我们只需要传递集合的iterator(如 test.iterator()),这就是iterator的好处,他不包含任何有关他所遍历的序列的类型信息,能够将遍历序列的操作与序列底层的结构分离。迭代器统一了对容器的访问方式。这也是接口的解耦的最好体现。
4、使用场景:
for:适合一些简单地数组
foreach:适合一些了解集合内部元素类型的集合
Iterator:功能比较强大,对于一些不知道数据类型,或者说需要对不同容器实现同样的遍历时使用,效果很好!
另注:
我们工作中,也会经常用到List
首先来聚个简单地LIst例子。以及他们之间的区别:
实际案例:
方法一:使用for获取
package test.java;
import java.util.ArrayList;
import java.util.List;
public class LIstTest {
publicstatic void main(String[] args) {
List test =new ArrayList();
test.add("a");
test.add("b");
test.add("c");
//for
for(int i =0; i < test.size(); i++){
System.out.println("List第" + i + "位是:" + test.get(i));
}
}
}
方法二:foreach获取
package test.java;
import java.util.ArrayList;
import java.util.List;
public class LIstTest {
publicstatic void main(String[] args) {
List test =new ArrayList();
test.add("a");
test.add("b");
test.add("c");
//foreach
for(String s: test){
System.out.println(s);
}
}
}
方法三:Iterator迭代器
package test.java;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class LIstTest {
publicstatic void main(String[] args) {
List test =new ArrayList();
test.add("a");
test.add("b");
test.add("c");
//Iterator
Iterator it= test.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
上面都是获取List案例,为什么会出现那么多方式呢?他们之间又有什么相同点和区别呢?
相同点相信都知道,那就是遍历List数组。
那么不同点主要有:
1、形式上的不同:
for:for(int i = 0; i < test.size(); i++)
foreach: for(String s : test)
Iterator: Iterator it = test.iterator();
while(it.hasNext())
2、条件不同:
for:for需要知道List集合(数组)的长度,逐个有序遍历。
foreach:foreach和Iterator虽然不需要知道数组长度,但是foreach需要知道List集合内元素类型,都是获取到元素之后再处理。
3、多态差别:
for:for和foreach都需要知道集合类型,甚至是集合内部元素类型,所以访问内部元素时,不能实现多态。
Iterator:Iterator是一个接口类型,他不关心集合或者数组类型,并且可以随时删除修改集合元素。当我们需要遍历不同的集合时,我们只需要传递集合的iterator(如 test.iterator()),这就是iterator的好处,他不包含任何有关他所遍历的序列的类型信息,能够将遍历序列的操作与序列底层的结构分离。迭代器统一了对容器的访问方式。这也是接口的解耦的最好体现。
4、使用场景:
for:适合一些简单地数组
foreach:适合一些了解集合内部元素类型的集合
Iterator:功能比较强大,对于一些不知道数据类型,或者说需要对不同容器实现同样的遍历时使用,效果很好!
另注:
我们工作中,也会经常用到List