Java集合及其遍历

在Java中集合的出现是因为数组已经满足不了程序猿的心,因为数组是大小静态固定的同时数组中只能存放一种类型的数据,这对于一个程序来说是不方便的,所以出现了集合,说白了集合的底层还是数组,可以理解为可以同时存储不同类型的动态数组。
Collection是最基本的集合接口,有不同的集合同时是不同的,一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行
集合的四大优点:
1.可以方便地扩展和改写集合 容量是可变的
2.可以存放任意类型的数据
3.集合提供了一系列的方法用来操作集合中的数据
4.做了算法优化处理,性能更高

集合就是将若干用途、性质相关或相近的数据组合而成一个整体
集合类型分为三种:

集(set)set集合中不区分元素的顺序,不允许出现重复元素
特点是:特点:无序的,长度可变的,不可重复的

列表(List)List集合区分元素的顺序有序允许但包含重复元素。
特点是: 有序的、线性的、无固定大小的、有下标的、先进先出

映射(Map):映射汇总保存成对的“键”“值”(Key-Value),映射中不能包含重复的键,每个键只能映射一个值
特点是: 特点:无序的、不可重复的

而实现List接口的常用类有LinkedList,ArrayList,Vector:
1.
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get , remove,insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
2.
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加
3.
 Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和 ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了 Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出 ConcurrentModificationException,因此必须捕获该异常。

实现Map接口的常用类是HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
key 不可以重复value 可重复

有序的Set,TreeSet排序Comparable方法,可以自定义规则
HashSet默认排序规则是(验证重复的规则)hashCode

实现Set接口的常用类是HashSet
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素

接下来介绍集合的遍历方式:

引入一个新的遍历方式:迭代器遍历:

Iterator对象“迭代器”自己不能new 而必须通过集合.iterator()方法得到对应集合的迭代器
hasNext()方法,查看是否还有下一个元素
next()方法,得到下一个元素,返回一个object对象
遍历List集合
List list =new ArrayList();
list.add(“aaa”);
list.add(“bbb”);
list.add(“ccc”);
方法一:
超级for循环遍历
for(String a:list){
System.out.println(a);
}

方法二:
对于ArrayList来说速度快的是用for循环,以Size为条件遍历:
for(int i=0; i < list.size();i++){
System.out.println(list.get(i));
}
方法三:
集合累的通用遍历方式,从很早的版本就有,用迭代器迭代
Iterator it=list.iterator();
while(it.hasNext()){
System.out.println(it.next);
}

遍历Set集合:
Set set = new HashSet()

方法一:
普通for循环:s
for(int i = 0 ; i < 5 ; i++){
set.add(String.valueOf(i));
}

方法二:
超级for
for(String str : set){
System.out.println(str);
}

遍历Map:
Map map = new HashMap();
map.put(“name1”, “value1”);
map.put(“name2”, “value2”);
map.put(“name3”, “value3”);
第一种

获得键值对
for (Map.Entry < String, String> entry : map.entrySet()) {
System.out.println(entry.getKey()+” : “+entry.getValue());
}
}
}

第二种迭代器
Set set = map.keySet();
Iterator iter = set.iterator();定义一个迭代器进行遍历得到的Map集合中的key的集合。
用迭代器遍历集合的方法.hasNext()方法。
while(iter.hasNext())
一定先定义一个字符串来接收迭代器遍历出来的数值。
String name = iter.next().toString();
打印出找到的Map集合中的Key值,然后用Map集合中的方法找到这个Key值对应的名称,用get方法进行提取。 System.out.println(name+ map.get(name));
例子:
Set sett = map.keySet();
for (String s : sett) {
System.out.println(s+”:”+map.get(s));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值