Java集合框架(2)

2、Iterator接口
 所有实现了Collection接口的集合类都有一个 iterator()方法用以返回一个的对象。

 Iterator对象称作迭代器,用以方便的实现对集合内元素的遍历操作。
 Iterator接口中定义的方法:
  boolean hashNext();
  Object next();
  void remove();

3、Set接口(无序无重复)
 Set接口没有提供Collection 接口额外的方法,但实现Set接口的集合类中的元素是不可重复的。
 Set的实现类主要有:HashSet及其子类 LinkedHashSet

4、HashSet
 特点:检索数据的效率比较高。
 HashSet:不保存元素的加入顺序,它根据元素的哈希码进行存放,所以取出这个元素时也可以根据哈希码快速找到。
 注意:在添加自定义类对象到HashSet时,自定义类必须重写hashCodeequals方法进行对象重复的判断。
 HashSet通过hashCode()方法和equals()方法实现对数据相等的判断。
 可以往HashSet中添加null,也只能添加一次相同的null元素。

5、LinkedHashSet
 特点:采用双向表链接的方式进行数据的存储。
 因为此特点,LinkedHashSet对元素的插入和删除效率比较高,对于检索效率要较低。
 LinkedHashSet在存放元素时,会记录每个元素的HashCode值,输出时会根据HashCode值的顺序(先进先出)进行输出,但是LinkedHashSet在底层对于数据的存放和HashSet原理一致。

6、List接口(有序有重复)
 List的实现类主要有:VectorArrayListLinkedList
 实现List接口的集合类中的元素是有序的,且允许重复。
 List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素。

7、ArrayList
 ArrayList底层通过动态数组来实现对元素的存储,
 ArrayList类能够自动增加或者减小其本身存储数据的大小,
 当目前数据的大小超过了ArrayList目前存放的大小,这时ArrayList会自动进行大小的调整。
 ArrayList 存储元素时会保存元素顺序。
 优点:
  对于使用索引取出元素有较好的效率
  它使用索引来快速定位对象
 缺点:
  元素做删除或插入速度较慢
  因为使用了数组,需要移动后面的元素以调整索引顺序。

8、LinkedList
 LinkedList是使用双向链表实现的集合。
 LinkedList新增了一些插入、删除的方法。 
  如:addFirst()addLast()
 优点:
  对频繁的插入或删除元素有较好的效率

9、Vector
 vectorArrayList大多数方法和功能都类似,实现原理基本一致
 vector是线程安全的
 特点:Vector对于检索效率也比较高,但由于线程问题,ArrayList检索的效率高于Vector
 vector常用方法:addElement(Object obj)insertElementAt(Object obj, int index)……
 

10、Map接口
 Map常用实现类:HashMap及子类LinkedHashMapProperties
 Map实现类中存储的-映射对 通过键来唯一标识。Map底层的是用Set来存放的,因此是无序无重复的。

11、HashMap
 基于哈希表的Map接口的实现,它是使用频率最高的一个容器,提供所有可选的映射操作,它内部对Set进行散列存放。所以根据去取的效果很高。并且允许使用 null 值和null 键,但它不保证映射顺序。
 1.HashMap底层通过Set对键进行散列存放。
 2.对于HashMap中的键要求要重写hashCodeequals方法
 3.HashMap中允许键值都为null
 4.HashMap映射的顺序没有保证
 5.常用String作为Map
 6.HashMap检索数据效率比较高
 7.直接输出Map对象时,以大括号扩住,并且以键=值的形式输出

12、LinkedHashMap
 LinkedHashMapHashMap的子类
 特点:对插入删除操作效率高
  输出元素有一定的顺序(按照添加的顺序进行输出)

13、HashTable
 HashTabelHashMap区别:
  1.HashTable是线程安全的
  2.HashTable不允许给键值对添加null

14、Properties
 Properties类是HashTable的子类,表示了一个持久属性集。它可保存在流中或人流中加载,属性列表中每个键及其对应值都是一个字符串。
 在属性文件中注释采用#
 使用步骤:
  1.获取文件流
InputStream iStream = Thread.currentThread().getContextClassLoader().getResourceAsStream ("名称.properties");
  2.创建Properties对象
   Properties pro=new Properties();
  3.加载流对象到Properties对象中,调用load方法可能会发生IOException
   pro.load(iStream);
  4.通过调用getProperty("key") 获取数据.

15、集合类的选择
 存放要求:
  无序:Set  不能重复
  有序:List  允许重复
  “Key-value”Map
 读写要求:
  Hash* 两者都高 HashCode
  Array* 读快写慢
  Linked* 读慢改快
  Tree* 加入元素可排序使用

Collections集合帮助类
 java.util.Collections类是操作集合的工具类,提供了一些静态方法实现了基于集合的一些常用算法
  void sort(List list) 根据元素的自然顺序 对指定List列表按升序进行排序。List列表中的所有元素都必须实现 Comparable 接口。
  void shuffle(List list) 对List列表内的元素进行随机排列
  void reverse(List list) 对List列表内的元素进行反转
  void copy(List dest, List src) 将src列表内的元素复制到dest列表中
  List synchronizedList(List list)  返回指定列表支持的同步(线程安全的)列表


猜你喜欢

转载自blog.csdn.net/qq_23031939/article/details/80785013