javaSE之集合框架

集合框架

  集合是一种长度可变的存储对象的容器数组也是存储对象的容器,但是数组长度是固定的;

  Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是List和Set。List是有序的集合,可以包含重复的元素,提供按索引访问的方式,Set不能包含重复的元素,且无序;
  Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value(键-值)对。Map不能包含重复的key,但是可以包含相同的value。
  

一、collection接口:

 

一)、共性方法

增加:

       1:add() 将指定对象存储到容器中, add 方法的参数类型是Object 便于接收任意对象
       2:addAll() 将指定集合中的元素添加到调用该方法和集合中
删除:
       3:remove() 将指定的对象从集合中删除
       4:removeAll() 将指定集合中的元素删除
修改
       5:clear() 清空集合中的所有元素
判断
       6:isEmpty() 判断集合是否为空
       7:contains() 判断集合何中是否包含指定对象
       8:containsAll() 判断集合中是否包含指定集合
       9: 使用equals()判断两个对象是否相等 

获取:  

        10:int size()    返回集合容器的大小

转成数组

        11: toArray()   集合转换数组

二)、List接口的实现类:

  ArrayList : 

 

  1.  底层的数据结构使用的是动态数组结构(数组长度是可变的百分之五十延长,同 3)。
  2.  特点:是查询很快,但增删较慢,线程不同步(数组查询快的原因是:数组的内存空间地址是连续的)。
  3.  ArrayList底层维护了一个Object[] 用于存储对象,默认数组的长度是10,当默认的或者指定的容量不够存储对象的时候,容量自动增长为原来的容量的1.5倍。
  4.  单线程效率高。

  LinkList :

 

  1.  底层的数据结构是链表结构(特点是查询较慢,增删较快)
  2.  特有方法:addFirst(E e)、getFirst(E e) 、removeFirst(E e) 
  3.  如果集合中没有元素,获取或者删除元素抛:NoSuchElementException
  4.  LinkList底层是双向链表,所以没有初始化大小,没有扩容机制

  vector : 

 

  1.  底层是数组数据结构 线程同步(数组长度是可变的百分之百延长),(无论查询还是增删都很慢,被ArrayList替代了)
  2.  特有的方法:
    void addElement(E obj)  在集合末尾添加元素
    E elementAt( int index) 返回指定角标的元素
    Enumeration elements()  返回集合中的所有元素,封装到Enumeration对象中测试此枚举是否包含更多的元素。
    E nextElement()    如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
    Enumeration 接口: boolean hasMoreElements() 
  3. 多线程间建议使用,因为vector是线程安全的

 三)、Set接口的实现类:

单列集合,元素不可重复

 HashSet

 

  1.  底层用的是HashMap哈希表结构存储
  2.  通过复写hashCode()方法和equals()方法来保证唯一性
  3.  HashSet无序
  4. 底层数据结构是哈希表,本质就是对哈希值的存储,通过判断元素的hashCode方法和equals方法来保证元素的唯一性,当hashCode值不相同,就直接存储了,不用在判断equals了,当hashCode值相同时,会在判断一次euqals方法的返回值是否为true,如果为true则视为用一个元素,不用存储,如果为false,这些相同哈希值不同内容的元素都存放一个桶里(当哈希表中有一个桶结构,每一个桶都有一个哈希值)

 TreeSet

 

  1.  底层用的是TreeMap树结构存储
  2.  通过Compareable接口的compareTo()方法来保证的唯一性
  3.  TreeSet有序
  4.  底层的数据结构是二叉树,可以对Set集合中的元素进行排序,这种结构,可以提高排序性能, 根据比较方法的返回值确定的,只要返回的是0.就代表元素重复

二、Map集合:

 HashMap

 

  1.  初始化大小是 16 ,扩容因子默认0.75
  2.  根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的
  3.  键对象不可以重复,所以HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null
  4.  非线程安全的,且无序的

 Hashtable

 

  1.  HashMap的线程安全版,它支持线程的同步
  2.  任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢
  3. 继承自Dictionary类,不同的是它不允许记录的键或者值为null,同时效率较低。

 LinkedHashMap

 

  1.  key和value都允许为空
  2.  Key重复会覆盖、Value允许重复
  3.  非线程安全的,但是是有序的
  4.  LinkedHashMap的基本实现思想就是----多态

 TreeMap

 

  1.  TreeMap的结果是按照字母表的顺序进行存储的
  2.  TreeMap的实现是红黑树算法的实现(一种自平衡的排序二叉树)
  3.  TreeMap 非线程安全
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值