关于Java集合

一,集合与数组区别

数组是一种容器(存基本数据类型:整型->byte,short,int,long;浮点型->float,double;布尔型->boolean;字符型->char;存对象),长度固定;

集合(存对象,对象类型可以不同),长度可变;

二,层次关系

Collection(interface):是集合类的根接口,Java没有提供其直接实现类。其继承类List和Set产生了接口:

          List:是一个有序的,可以包含重复元素的集合,能按索引访问(能用for循环,迭代遍历)。检索效率高,插入和删除效率低,且影响元素位置。

              LinkedList经常用在增删操作较多而查询操作很少的情况下,ArrayList则相反。

          Set:不能包含重复元素(重复元素会被覆盖掉),只能用迭代遍历。检索效率低下。插入和删除效率高,且不影响元素位置的变化。

Map(interface)是java.util的一个接口,和Collection相互独立,都属于集合类。以key-value的形式存储,key的值不能重复,但是value的值可以重复。       

        map的遍历

        第一种:KeySet()

将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key 。
取到的结果会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet()方法,而这个方法返回的Set结果,里面的数据是乱序排放的。
典型用法如下:
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put("key3","lisi3");
map.put("key4","lisi4");  
//先获取map集合的所有键的set集合,keyset()
Iterator it = map.keySet().iterator();
//获取迭代器
while(it.hasNext()){
Object key = it.next();
System.out.println(map.get(key));
}

        第二种:entrySet()

Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()两种方法来取key和value。返回的是Entry接口。
典型用法如下:
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put("key3","lisi3");
map.put("key4","lisi4");
//将map集合中的映射关系取出,存入到set集合
Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Entry e =(Entry) it.next();
System.out.println("键"+e.getKey () + "的值为" + e.getValue());
}
推荐使用第二种方式,即entrySet()方法,效率较高。
对于keySet其实是遍历了2次,一次是转为iterator,一次就是从HashMap中取出key所对于的value。而entryset只是遍历了第一次,它把key和value都放到了entry中,所以快了。两种遍历的遍历时间相差还是很明显的。

Iterator(interface)被所有集合类实现,用来遍历集合中的元素,主要包括三种方法:

          1,hasNext()是否有下一个元素;

          2,next()下一个元素;

          3,remove()删除当前元素。

三,遍历

1》Iterator:迭代输出,使用比较频繁。形式    Iterator it = arr.iterator(); while(it.hasNext()){ object o =it.next(); ...}

2》ListIterator:是Iterator的子接口,专门用于输出List中的内容。

3》forEach:JDK1.5之后提供的新功能,可以输出数组或集合。形式  for(int i:arr){...}

4》for:形式  for(int i=0;i<arr.size();i++){...}

原文地址:https://www.cnblogs.com/vlsion/p/8340572.html