java里set list 为什么能遍历集合
增强型的for循环 和普通for循环一样
增强型的for循环 优点主要体现在集合中,随便举个例子
比如对 set 的遍历
一般是迭代遍历:
Set set = new HashSet();
Iterator it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
for循环遍历:
for (String str : set) {
System.out.println(str);
}
是不是简单些?
优点还体现在泛型 假如 set中存放的是Object
Set set = new HashSet();
for循环遍历:
for (Object obj: set) {
if(obj instanceof Integer){
int aa= (Integer)obj;
}else if(obj instanceof String){
String aa = (String)obj
}
........
}
唯一的缺点就是 在遍历 集合过程中,不能对集合本身进行操作
for (String str : set) {
set.remove(str);//错误!
}
看文档呀,文档详细多了
添加元素不是add就是set
遍历一般就是for循环,
还有个迭代,for循环的
简便写法……
一、list的遍历
有三种遍历方法:
/**
* list的三种遍历
* @author Owner
*
*/
public class ListTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("c");//可添加重复数据
//遍历方法一 迭代器
for(Iterator<String> iterator = list.iterator();iterator.hasNext();){
String value = iterator.next();
System.out.println(value);
}
//遍历方法二 超级for循环
for(String value : list){
System.out.println(value);
}
//遍历方法三
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
分析一下这三种遍历吧,第一种迭代器的遍历,执行过程中会进行数据锁定,性能上是安全的,效率较低;
第二种,是java新语法,增强型for循环,其中内部也是调用了迭代器;
第三种,直接使用取数组的方式,效率最快,但会有多线程安全问题。
原理如下:
ArrayList底层是采用数组来保存数据的,对于访问数组里的数据来说,直接采用数组索引当然是最快的了,相当于直接从内存读取数据,其他的两种迭代方式,实际上都是一种,即iterator,foreach包装了一下;iterator遍历最终还是要通过索引来访问数据,源码中对应的get方法了。
Set的遍历和List类似,由于set没有get方法,所有第三种是不可以的;
总结:综合考虑使用第二种,增强型for循环就可以
二、List和Set相互转化:
这个需求一般也不多,直接上代码吧:
/**
* List和Set的转化(Set转化成List)
*/
public static <T> List<T> SetToList(Set<T> set) {
List<T> list = new ArrayList<>();
list.addAll(set);
return list;
}
使用泛型实现。不过值得注意的是,list转化成set会丢失数据,重复数据会丢失。
list和set集合是java中最常见的两种数据结构,都是Collection的子集,今天就简单的说说他们两者的遍历以及相互转化吧。
一、list的遍历
有三种遍历方法:
/**
* list的三种遍历
* @author Owner
*
*/
public class ListTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("c");//可添加重复数据
//遍历方法一 迭代器
for(Iterator<String> iterator = list.iterator();iterator.hasNext();){
String value = iterator.next();
System.out.println(value);
}
//遍历方法二 超级for循环
for(String value : list){
System.out.println(value);
}
//遍历方法三
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
分析一下这三种遍历吧,第一种迭代器的遍历,执行过程中会进行数据锁定,性能上是安全的,效率较低;
第二种,是java新语法,增强型for循环,其中内部也是调用了迭代器;
第三种,直接使用取数组的方式,效率最快,但会有多线程安全问题。
原理如下:
ArrayList底层是采用数组来保存数据的,对于访问数组里的数据来说,直接采用数组索引当然是最快的了,相当于直接从内存读取数据,其他的两种迭代方式,实际上都是一种,即iterator,foreach包装了一下;iterator遍历最终还是要通过索引来访问数据,源码中对应的get方法了。
Set的遍历和List类似,由于set没有get方法,所有第三种是不可以的;
总结:综合考虑使用第二种,增强型for循环就可以
二、List和Set相互转化:
这个需求一般也不多,直接上代码吧:
/**
* List和Set的转化(Set转化成List)
*/
public static <T> List<T> SetToList(Set<T> set) {
List<T> list = new ArrayList<>();
list.addAll(set);
return list;
}
使用泛型实现。不过值得注意的是,list转化成set会丢失数据,重复数据会丢失。
底层实现了迭代器。
仍厚齐吉: list和set集合是java中最常见的两种数据结构,都是Collection的子集,今天就简单的说说他们两者的遍历以及相互转化吧.一、list的遍历 有三种遍历方法:/** * list的三种遍历 * @author Owner * */ public class ListTest {public static void main(...
卫滨区15882125446: java中set和list的区别 - ?
仍厚齐吉: Collection 的子接口 Set,List 一: Set 不允许重复,List允许重复 二: Set 无序,List有序 .这里的无序和有序, 是说的添加顺序和元素顺序的一致性. 比如添加时是obj1,obj2,obj3 ,那么list存储他们的顺序就是obj1,obj2,obj3 而set集合的存储顺序...
卫滨区15882125446: java中 List 与Set 的区别 - ?
仍厚齐吉: 他们各自有自己的实现类,有无顺序的实现类,也有有顺序的实现类,删除数据.最大的不同就是List是可以重复的.而Set是不能重复的,插入.List适合经常追加数据,插入.但随即取数效率比较低.Set适合经常地随即储存,删除.但是在遍历时效率比较低List和Set都是接口
卫滨区15882125446: java中为什么list集合remove()可以弹出,而set只能删除? - ?
仍厚齐吉: 就remove()这个方法来说,list有两个,重载形式,set只有一个!你所说的弹出,是list在接受int类型的情况,会弹出被删除的对象!这个功能只有list有,为什么有?list底层是数组,数组你知道当然可以接受指定下标了,set也很想有这样的功能,但是它没有 set底层是数据结构不一样,没办法去指定下标啊,功能肯定是越多越好了!
卫滨区15882125446: java中list和set接口 set不可以重复,list可以重复 - ?
仍厚齐吉: 他们区别在于 Set是键值对 一一对应, 根据key找到Value. 如果key重复了,那么就不是一一对应了. 而list是根据索引找到元素, 所以可以重复, 比如list[0]和list[1]元素一样, 但是你每次只能找到一个元素.. 而set,键一样, 就会出现2个或者更多元素, 显然不能
卫滨区15882125446: java中list,set和map 的区别 - ?
仍厚齐吉: set集合中的数据没有顺序,且如果add两个一样的对象或基本类型的数据,set集合里也是只有一个,即set集合中的数据都是独一无二的;不能使用加强的for循环;list中的数据是有顺序的,可以加入多个一样的对象和基本类型的数据,可使用加强的for循环;map集合是键值对的形式进行存储,一个KEY,一个value.
卫滨区15882125446: java 中 collection 和set ,list - ?
仍厚齐吉: add方法是collection,但是set和list在实现collection接口时都有重写该方法,set和list的add方法不同就是最好的证明.api中有写到“如果 set 中尚未存在指定的元素,则添加此元素(可选操作).更确切地讲,如果此 set 没有包含满足 (e==null...
卫滨区15882125446: java.util包中 Set 和 List 的区别 - ?
仍厚齐吉: Set(集合) Set是最简单的一种集合.集合中的对象不按特定的方式排序,并且没有重复对象. Set接口主要实现了两个实现类:1. HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快 2. TreeSet :TreeSet类实现了...
卫滨区15882125446: Java中的List和Set是类还是接口? - ?
仍厚齐吉: List和Set都是接口.他们拥有有不同的实现类. 最大的不同就是List是可以插入重复对象的.而Set是不能插入重复对象的. List适合经常追加数据,插入,删除数据.但随即取数效率比较低. Set适合经常地随即储存,插入,删除.但是在遍历时效率比较低.
卫滨区15882125446: Java中集合到底有什么用? - ?
仍厚齐吉: Java中,集合主要有List、Set和Map,我个人理解集合的主要作用是相当于一个容器,你可以在里面装你希望装的对象,可以是Java内置的类,也可以是自定义的类.再者,这些集合支持一些方便的操作,比如Set可以排除重复,Map可以快速检索等等.