Java常用数据结构(一)
2016-08-17 20:37
176 查看
本文为博主整理及总结,以便学习,如果本文使用您带有版权的文字、图片,并且未写上出处请联系我删除。
实现树:
Collection
├ List
│ ├ ArrayList
│ ├ Vector
│ │ └ Stack
│ └ LinkedList
└ set
├ HashSet
│ └ LinkedHashSet
└ TreeSet
Map
├ HashMap
│ └ LinkedHashMap
└ TreeMap
Lis接口
Set接口
Map接口
4.1 List <E>
List接口与Set不同,最大的特点就是允许重复,而且List在iterator、add、remove、equals和hashcode方法的协定上比Collection加了一些其他约定。
常用的子类:ArrayList Vector LinkedList
ArrayList:List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括
null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于
Vector 类,除了此类是不同步的。)
Vector:
LinkedList:链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现
List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和
insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
常用的子类:HashSet TreeSet
HashSet:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null 元素。
LinkedHashSet:
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。注意,插入顺序不 受在 set 中重新插入的 元素的影响。(如果在s.contains(e) 返回true 后立即调用
s.add(e),则元素 e 会被重新插入到 sets 中。)
TreeSet:基于TreeMap的NavgableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的Comparator
进行排序,具体取决于使用的构造方法。
常用的子类:HashMap TreeMap
HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用
null 值和null 键。(除了非同步和允许使用 null 之外,HashMap 类与Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
LinkedHashMap:Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注意,如果在映射中重新插入 键,则插入顺序不受影响。(如果在调用m.put(k, v) 前m.containsKey(k)
返回了 true,则调用时会将键 k 重新插入到映射m 中。)
TreeMap:基于红黑树(Red-Black tree)的NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator
进行排序,具体取决于使用的构造方法。
注:内容后记补充
1.什么是数据结构?
数据结构是指数据的各种逻辑结构和存储结构,以及对数据的各种操作。2.Java数据结构类库
java.util包含有很多类型的数据结构。常用的有三个接口List、set、map;实现树:
Collection
├ List
│ ├ ArrayList
│ ├ Vector
│ │ └ Stack
│ └ LinkedList
└ set
├ HashSet
│ └ LinkedHashSet
└ TreeSet
Map
├ HashMap
│ └ LinkedHashMap
└ TreeMap
3.各接口的实现类
Collection是一个根接口,提供了更具体的子接口(如List和Set)实现。Lis接口
Set接口
Map接口
4.各个接口或实现类的特性
4.1 List <E>
List接口与Set不同,最大的特点就是允许重复,而且List在iterator、add、remove、equals和hashcode方法的协定上比Collection加了一些其他约定。常用的子类:ArrayList Vector LinkedList
ArrayList:List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括
null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于
Vector 类,除了此类是不同步的。)
Vector:
Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,
Vector的大小可以根据需要增大或缩小,以适应创建
Vector后进行添加或移除项的操作。
LinkedList:链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现
List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和
insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
4.2 Set <E>
Set不可以包含重复的元素,只能包含一个null。常用的子类:HashSet TreeSet
HashSet:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null 元素。
LinkedHashSet:
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。注意,插入顺序不 受在 set 中重新插入的 元素的影响。(如果在s.contains(e) 返回true 后立即调用
s.add(e),则元素 e 会被重新插入到 sets 中。)
TreeSet:基于TreeMap的NavgableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的Comparator
进行排序,具体取决于使用的构造方法。
4.3 Map<K,V>
键值对存储,不能有重复Key。常用的子类:HashMap TreeMap
HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用
null 值和null 键。(除了非同步和允许使用 null 之外,HashMap 类与Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
LinkedHashMap:Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注意,如果在映射中重新插入 键,则插入顺序不受影响。(如果在调用m.put(k, v) 前m.containsKey(k)
返回了 true,则调用时会将键 k 重新插入到映射m 中。)
TreeMap:基于红黑树(Red-Black tree)的NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator
进行排序,具体取决于使用的构造方法。
注:内容后记补充
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序