Java中的三类常见集合List、Set、Map

Java中的三种常见集合List、Set、Map

  • 数组长度是固定的,在需要一个不固定的长度的"数组"存储数据时,集合就出现了
  • 集合的特点
    1. 可存放不同类型的对象(必须是对象)
      数组只能存放同一类型数据,但是可以存放基本类型数据
    2. 集合的长度可以自动增加
      数组的长度一旦确定,就不能再改变
    3. 集合对象中有众多方法可以直接调用进行元素(数据)操作
      数组对象中没有方法可以对数据进行操作
    4. java.util包中的辅助工具类Colletions,也能对集合中的元素进行操作
      java.util包中的辅助工具类Arrays,是用来对数组中的元素进行操作的。
    5. 都是泛型类

Collection接口

  • Collection接口继承了Iterable接口,使得继承了collection接口的类可以使用(子类实现)Iterable接口中的iterator方法
    • 继承了Iterable接口的集合都能使用增强型for循环(JDK1.5以上),甚至是lambda表达式(JDK1.8以上)
	//	迭代器遍历
	Iterator iterator = c.iterator();
			while(iterator.hasNext()){
				Object obj = iterator.next();
				System.out.println(obj);
			}
			
	//forEach遍历
	for(Object o:c){
				System.out.println(o);
			}
			
	//lambda表达式
		c.forEach(obj -> System.out.println(obj));
		c.forEach(System.out::println);

List接口

  • 特点
    1. 集合内的元素有序(这里指的是存入和取出的顺序)
    2. 集合内的元素可以重复
    3. 元素可以为null
    4. 元素定义了下标
  • 常用的实现类
    • ArrayList

      1. 是用什么实现的?
        底层使用动态数组实现的
      2. 继承了什么类,实现了什么接口
        继承了AbstractList,实现了List, RandomAccess, Cloneable,以及序列化接口
      3. 特点
        线程不安全
    • LinkedList

      1. 是用什么实现的?
        底层使用双向链表实现的
      2. 继承了什么类,实现了什么接口
        继承了AbstractSequentialList,实现了List, Deque, Cloneable,以及序列化接口
      3. 特点
        线程不安全
        继承了队列接口,能够在头部和尾部快速插入数据
        插入和删除元素的速度比ArrayList快
    • Vector

      1. 是用什么实现的?
        和ArrayList很像,底层使用动态数组实现的
      2. 继承了什么类,实现了什么接口
        继承了AbstractList,实现了List, RandomAccess, Cloneable,以及序列化接口
      3. 特点
        线程安全
        ArrayList是一次1.5倍扩容,vector是2倍

Set接口

  • 特点
    1. 集合内的元素无序(这里指的是存入和取出的顺序)
    2. 集合内的元素不可以重复,添加不进去
    3. 元素没有定义下标
    4. Set集合底层实际上是用Map的Key值做为Set的元素
    5. 判断元素是否重复会先调用hashCode方法,如果一样,则调用equals方法
  • 常用的实现类
    • HashSet

      1. 是用什么实现的?
        构造器调用了HashMap,
      2. 继承了什么类,实现了什么接口
        继承了AbstractSet,实现了Set,Cloneable,以及序列化接口
      3. 特点(它的特点基本上是HashMap的特点)
        键可以为null(元素为Null时HashMap做了处理)
    • TreeSet

      1. 是用什么实现的?
        构造器调用了TreeMap
      2. 继承了什么类,实现了什么接口
        继承了AbstractSet,实现了NavigableSet,Cloneable,以及序列化接口
      3. 特点(它的特点基本上是TreeMap的特点)
        键可以为null
        可以将加入的元素进行排序
        元素必须可以调用CompareTo方法(自己或者父类实现了Compareable接口),否则会抛出类型转换异常
        可以进行自定义排序,需要在构造器传入一个已经实现比较器(Comparator)接口的类对象

Map接口

  • 特点
    1. 集合内的键不可以重复,后面的Value覆盖前面的
    2. 集合内的元素是键-值(Key-Value)成对的
    3. 判断Key是否重复会先调用hashCode方法,如果一样,则调用equals方法
    4. Map因为没有继承Iterable接口,所以不能使用迭代器和ForEach进行遍历
    5. Map遍历
      遍历键和值有两种方式:
	//keySet()方法
		for(Object key:map.keySet()){
				System.out.println(key+" : "+map.get(key));
		}
	//entrySet()方法
		Set entrySet = map.entrySet();
		for(Object obj:entrySet){
			Entry entry = (Entry)obj;
			System.out.println(entry.getKey());
			System.out.println(entry.getValue());
		}
   		只遍历Value值(除去上面的)
		for(Object value:map.values()){
			System.out.println(value);
		}
  • 常用的实现类
    • HashMap

      1. 是用什么实现的?
        底层实现是基于哈希表(数组+链表),JDK1.8加入了红黑树
      2. 继承了什么类,实现了什么接口
        继承了AbstractMap,实现了Map,Cloneable,以及序列化接口
      3. 特点
        键和值可以为null
        HashMap重新计算hash值
        在这里插入图片描述JDK8中HashCode hash方法的源码
    • TreeMap

      1. 是用什么实现的?
        • 底层实现是红黑树的实现
      2. 继承了什么类,实现了什么接口
        • 继承了AbstractMap,实现了NavigableSet,Cloneable,以及序列化接口
      3. 特点
        • 键不可为null,值可以为null
        • 和TreeSet一样,键需要排序的比较器,或者实现Comparable接口
        • 线程不安全
    • Hashtable

      1. 是用什么实现的?
        • 底层实现是基于哈希表(数组+链表)
      2. 继承了什么类,实现了什么接口
        • 继承了Dictionary,实现了Map,Cloneable,以及序列化接口
      3. 特点
        • 线程安全
        • 键和值不可为null
        • 直接使用对象的hashCode方法在这里插入图片描述JDK8中的Hashtable部分方法的源码
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值