java容器简要概述
2016-07-28 13:33
302 查看
java中集合框架的概述
java集合类主要用于保存对象的。
常用的集合对象:
Colletion接口,Collection接口是集合中的顶层容器,表示的是一组对象,它的下面有两个子接口List接口和Set接口。
List接口:元素有序,可以重复。
ArrayList:底层以数组进行存储元素,存储在ArrayList中的元素是有序的,当容量不足时可以自动扩容。
LinkedList:底层以链表进行存储元素,插入和删除效率高。
Set接口:元素无序,不可以重复。
HashSet:底层是基于散列表实现的,底层的方法基本调用的HashMap中的方法,。
TreeSet:方法基本调用了TreeMap中的方法。
Map接口,以键值对的方式存储对象,不能存在重复的键,每个键也最多只能映射到一个值。
HashMap:底层是基于散列表实现的,jdk1.6使用数组和链表来存储元素,jdk1.8做了优化使用了数组,链表和红黑树来实现,当链表长度超过阈值 是,就会将链表转换成红黑树,从而减少查找时间。
Hashtable:现在基本不使用Hashtable了,在多线程环境下它的效率没有ConcurrentHashMap的效率高
TreeMap:底层基于红黑树实现的,能够自动对添加的对象进行排序,这个对象要实现Comparable接口。
ConcurrentHashMap:jdk1.5引入的并发包中的类。采用多个分段锁,把Map分成多个Segment。
注意:Collections并不是集合,它是一个操作集合的工具类。与Arrays工具类类似。提供了许多操作集合的方法。
ArrayList
对于不需要频繁的查找和删除的操作,可以考虑选用ArrayList来进行存储。ArrayList不是线程同步的,不适于多线程环境下。如果在多线程环境下可以使用
Collections.synchronizedList(new ArrayList()),来将该列表包装起来。
LinkedList
适用于查找和删除操作频繁的情况,不适应需要频繁查找的情况。不是线程同步的。
ArrayList和LinkedList的区别?
1.ArrayList是基于数组来实现的,LinkedList是基于链表来实现的。
2.ArrrayList适合用于频繁的查找操作,LinkedList则适用于频繁的插入和删除操作。(多数据情况下,对于单条数据插入和删除ArrayList效率优于LinkedList)
HashSet和TreeSet
TreeSet在进行添加对象时,该对象应该实现内部比较器Comparable接口,否则抛出异常。
HashMap和Hashtable的区别与联系
1.Hashtable是线程同步的,Hashtable中的大部分方法都加了synchronized进行同步,HashMap是非线程同步的,不适合用在多线程环境下。
2.HashMap和Hashtable底层都是基于散列表来实现的。
3.Hashtable 是允许空的键值对的,Hashtable则不允许。
4.Hashtable还继承了Dictionary接口.
5.现在基本上不在使用Hashtable,在多线程环境下可以使用ConcurrentHashMap。
java集合类主要用于保存对象的。
常用的集合对象:
Colletion接口,Collection接口是集合中的顶层容器,表示的是一组对象,它的下面有两个子接口List接口和Set接口。
List接口:元素有序,可以重复。
ArrayList:底层以数组进行存储元素,存储在ArrayList中的元素是有序的,当容量不足时可以自动扩容。
LinkedList:底层以链表进行存储元素,插入和删除效率高。
Set接口:元素无序,不可以重复。
HashSet:底层是基于散列表实现的,底层的方法基本调用的HashMap中的方法,。
TreeSet:方法基本调用了TreeMap中的方法。
Map接口,以键值对的方式存储对象,不能存在重复的键,每个键也最多只能映射到一个值。
HashMap:底层是基于散列表实现的,jdk1.6使用数组和链表来存储元素,jdk1.8做了优化使用了数组,链表和红黑树来实现,当链表长度超过阈值 是,就会将链表转换成红黑树,从而减少查找时间。
Hashtable:现在基本不使用Hashtable了,在多线程环境下它的效率没有ConcurrentHashMap的效率高
TreeMap:底层基于红黑树实现的,能够自动对添加的对象进行排序,这个对象要实现Comparable接口。
ConcurrentHashMap:jdk1.5引入的并发包中的类。采用多个分段锁,把Map分成多个Segment。
注意:Collections并不是集合,它是一个操作集合的工具类。与Arrays工具类类似。提供了许多操作集合的方法。
ArrayList
对于不需要频繁的查找和删除的操作,可以考虑选用ArrayList来进行存储。ArrayList不是线程同步的,不适于多线程环境下。如果在多线程环境下可以使用
Collections.synchronizedList(new ArrayList()),来将该列表包装起来。
LinkedList
适用于查找和删除操作频繁的情况,不适应需要频繁查找的情况。不是线程同步的。
ArrayList和LinkedList的区别?
1.ArrayList是基于数组来实现的,LinkedList是基于链表来实现的。
2.ArrrayList适合用于频繁的查找操作,LinkedList则适用于频繁的插入和删除操作。(多数据情况下,对于单条数据插入和删除ArrayList效率优于LinkedList)
HashSet和TreeSet
TreeSet在进行添加对象时,该对象应该实现内部比较器Comparable接口,否则抛出异常。
HashMap和Hashtable的区别与联系
1.Hashtable是线程同步的,Hashtable中的大部分方法都加了synchronized进行同步,HashMap是非线程同步的,不适合用在多线程环境下。
2.HashMap和Hashtable底层都是基于散列表来实现的。
3.Hashtable 是允许空的键值对的,Hashtable则不允许。
4.Hashtable还继承了Dictionary接口.
5.现在基本上不在使用Hashtable,在多线程环境下可以使用ConcurrentHashMap。
相关文章推荐
- leetcode129 Sum Root to Leaf Numbers java 算法
- Thinking in Java 第20章 注解(元数据)
- java日期加减
- 在广州的一年
- 使用Struts2 验证框架,验证信息重复多次出现
- java反射机制Class类的用法详解
- java反射修改private值和调用private函数
- 深入理解Java的接口和抽象类
- spring
- 将java工程转为web工程(Myeclipse无法add web capabilities的时候)
- Java HashMap工作原理及实现
- MyEclipse10破解问题
- Ubuntu下配置JDK
- 详解JAVA高质量代码之数组与集合
- Java中byte与16进制字符串的互相转换
- Struts2入门示例教程
- struts2的核心和工作原理
- Java Mybatis 传参方式
- eclipse项目迁移到android studio上
- Exception 笔记