欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java编程思想笔记(八)集合容器

程序员文章站 2022-03-15 12:01:42
...

1.集合中添加另一个集合的方法:

(1).Collection.addAll(被添加的Collection对象)方法:

如:list1.addAll(list2);

(2).Collections.addAll(添加到的目标Collection对象,可变参数的集合或者对象)方法:

如:Collections.addAll(list1, new Object1(), new Object2()…);

       Collectionns.addAll(list1, list2…);

注意:Collections是Java集合容器的工具类,相比于(1),使用Collections的(2)更灵活。

 

2.Java集合中常用的交集、并集和差集操作:

并集:collection对象1.addAll(collection对象2);

交集:collection对象1. retainAll(collection对象2);

差集:collection对象1. removeAll(collection对象2);

注意:上述的集合操作时,集合元素的equals方法会影响操作结果。

 

3.将其他类型集合转换为List:

Arrays.asList(非List类型的集合对象/可变参数的对象);方法可以将传递的参数转变为List集合。如:Arrays.asList(new Object1(),new Object2(),…);

Arrays和Collections类似,是Array数组类型集合的工具类。

注意:Arrays.asList()方法转换后的List对象是一个size不能改变的对象,如果对该对象做增加或者删除元素操作时,将会报不支持的操作异常。

 

4.List集合:

List集合主要有两种具体的集合容器:ArrayList和LinkedList。

(1).ArrayList:底层实现是数组,提供了根据数组下标快速随机访问的能力,但是增加和删除元素时因为需要引动数组的元素,因此比较慢。

(2).LinkedList:底层实现是链表,链表访问元素时必须从链表头至链表尾挨个查找,因此只能顺序访问,速度比随机访问要慢。但是增加和删除元素时,只需要修改链表的指针而不需要移动元素,因此速度比较快。

 

5.LinkedList:

LinkedList除了实现了基本的List接口以外,还提供了一些特定的方法,使得LinkedList可以方便地实现Stack、Queue以及双端Queue的功能。

LinkedList提供的非List接口方法:

(1).getFirst():获取并且不移除LinkedList集合中第一个元素。如果集合为空,抛出NoSuchElementException异常。

(2).element():获取并且不移除LinkedList集合中第一个元素。如果集合为空,抛出NoSuchElementException异常。

(3).peek():获取并且不移除LinkedList集合中第一个元素。如果集合为空,则返回null。

(4).removeFirst():获取并且移除LinkedList集合中第一个元素。如果集合为空,抛出NoSuchElementException异常。

(5).remove():获取并且移除LinkedList集合中第一个元素。如果集合为空,抛出NoSuchElementException异常。

(6).poll():获取并且移除LinkedList集合中第一个元素。如果集合为空,则返回null。

(7).addFirst():向LinkedList集合的头部插入一个元素。

(8).add():向LinkedList集合的尾部插入一个元素。

(9).offer():向LinkedList集合的尾部插入一个元素。

(10).removeLast():获取并且移除LinkedList集合中最后一个元素。如果集合为空,抛出NoSuchElementException异常。

 

6.Iterator:

Iterator迭代器在java集合容器中应用比较广泛,对于List类型的集合,可以通过下标索引值获取到指定的元素,而对于Set类型的集合,因为Set是没有索引的,因此只能通过迭代器来遍历。

Iterator迭代器是一个顺序选择和遍历集合元素的对象,使用者不需要关心其底层的数据结构和实现方式。Java中的Iterator迭代器是单向的。

Iterator的常用方法如下:

(1).collection对象.iterator()方法:将集合对象转换为Iterator迭代器。

(2).iterator对象.hasNext()方法:判断迭代器中是否还有元素。

(3).iterator对象.next()方法:获取迭代器中下一个元素。
(4).iterator对象.remove()方法:删除迭代器中当前元素。

注意:使用迭代器的好处是,当数据结构从List变为Set之后,迭代集合的相关代码一点都不用改变。

 

7.List Iterator:

ListIterator是Iterator的子类,它只能有List类型的集合产生,ListIterator是一个双向的迭代器,即它可以向前和向后双向遍历集合。ListIterator的常用方法如下:

(1).list类型对象.listIterator():将List类型的集合转换为ListIterator迭代器。

(2).list类型对象.listIterator(int n):将List类型的集合转换为ListIterator迭代器,同时指定迭代器的起始元素为第n个元素。

(3).listIterator对象.hasNext():判断迭代器中是否还有下一个元素。

(4).listIterator对象.next():获取迭代器中的下一个元素。

(5).listIterator对象.hasPrevious():判断迭代器中是否还有前一个元素。

(6).listIterator对象.previous():获取迭代器中的前一个元素。

(7).listIterator对象.set(元素对象):将当前迭代到的元素设置为另一个值。

 

8.Map遍历3中方法:

Map<String, Object>map = new HashMap<String, Object>();

map.put(“test1”, object1);

……

map.put(“testn” , objectn);

(1).Map的values()方法可以获取Map值的集合:

Iterator it = map.values().iterator();  
while(it.hasNext()){  
    Object obj = it.next();  
}  

  cop

 

(2).Map的keySet方法可以获取Map键的Set集合:

 

Set<String> keys = map.keySet();  
for(Iterator it = key.iterator(); it.hasNext(); ){  
    String key = it.next();  
    Object obj = map.get(key);  
}  

 

 

(3).通过使用Entry来得到Map的key和value:

 

Set<Map.Entry<String, Object>> entrySet = map.entrySet();  
for(Iterator <Map.Entry<String, Object>> it = entrySet.iterator(); it.hasNext(); ){  
    Map.Entry<String, Object> entry = it.next();  
    String key = entry.getKey();  
    Object value = entry.getValue();  
}  

 

 

 

9.Collection和Iterator:

Collection是java中除了Map以外的集合容器的通用接口,如果想自定义一种集合容器类型的类,可以选择实现Collection接口或者继承Collection的子类。

实现Collection接口或者继承Collection子类的时候,必须实现Collection接口的所有方法,而Iterator为定义自定义集合容器类型提供了另一种方便,Iterator是一种轻量级的接口,只需要实现hasNext(),next()方法即可,remove()方法是可选方法。

注意:Foreach循环支持所有实现了Iterable接口的集合容器(Collection接口的父接口是Iterable),Map集合没有实现Iterable接口,因此不支持Foreach循环。

10.java集合容器框架图:

java编程思想笔记(八)集合容器
            
    
    博客分类: java编程思想笔记 javaWebjava编程思想