java中常见的数据结构分类
来源:互联网 发布:unity引擎底层源码 编辑:程序博客网 时间:2024/06/07 20:17
自己总结了下java中常见的数据结构和分类
在这里,我总结了list中数据结构对应我们所学的线性表,属于顺序存储还是链式存储,但没有总结set数据结构对应我们所学的哪一种(按理说应该是集合),是因为treeset是基于红黑树的,hashset和linkedhashset基于hash表,不能完全对应到数据结构书上的内容。。。。我认为书上的数据结构是一些基础的数据结构,发展到如今常用的数据结构都是在此基础上延伸或者组合起来的,虽然名称感觉上类似(set与集合,list和线性表,map和貌似没有==),但是实际上早已经不是一类了。
官网的图片如图:
上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。
一、arraylist,linkedlist和vector
从图中可以看出,这三者都实现了List 接口.所有使用方式也很相似,主要区别在于因为实现方式的不同,所以对不同的操作具有不同的效率。
ArrayList 是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组.
LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.
当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义.
Vector 和ArrayList类似,但属于强同步类。如果你的程序本身是线程安全的(thread-safe,没有在多个线程之间共享同一个集合/对象),那么使用ArrayList是更好的选择。
Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.
而 LinkedList 还实现了 Queue 接口,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等.
注意: 默认情况下ArrayList的初始容量非常小,所以如果可以预估数据量的话,分配一个较大的初始值属于最佳实践,这样可以减少调整大小的开销。
二、hashset,linkedhashset和treeset
HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放;
LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代;
TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。
用例代码:
package com.test;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
/**
* @description 几个set的比较
* HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放;
* LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代;
* TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。
* @author Zhou-Jingxian
*
*/
public class SetDemo {
public static void main(String[] args) {
HashSet<String> hs = new HashSet<String>();
hs.add("B");
hs.add("A");
hs.add("D");
hs.add("E");
hs.add("C");
hs.add("F");
System.out.println("HashSet 顺序:\n"+hs);
LinkedHashSet<String> lhs = new LinkedHashSet<String>();
lhs.add("B");
lhs.add("A");
lhs.add("D");
lhs.add("E");
lhs.add("C");
lhs.add("F");
System.out.println("LinkedHashSet 顺序:\n"+lhs);
TreeSet<String> ts = new TreeSet<String>();
ts.add("B");
ts.add("A");
ts.add("D");
ts.add("E");
ts.add("C");
ts.add("F");
System.out.println("TreeSet 顺序:\n"+ts);
}
}
输出效果:
HashSet 顺序:
[D, E, F, A, B, C]
LinkedHashSet 顺序:
[B, A, D, E, C, F]
TreeSet 顺序:
[A, B, C, D, E, F]
三、hashmap,linkedhashmap,hashtable和treemap
All three classes implement the Map
interface and offer mostly the same functionality. The most important difference is the order in which iteration through the entries will happen:
HashMap
makes absolutely no guarantees about the iteration order. It can (and will) even change completely when new elements are added.TreeMap
will iterate according to the "natural ordering" of the keys according to theircompareTo()
method (or an externally suppliedComparator
). Additionally, it implements theSortedMap
interface, which contains methods that depend on this sort order.LinkedHashMap
will iterate in the order in which the entries were put into the map
"Hashtable" is the generic name for hash-based maps. In the context of the Java API, Hashtable
is an obsolete class from the days of Java 1.1 before the collections framework existed. It should not be used anymore, because its API is cluttered with obsolete methods that duplicate functionality, and its methods are synchronized (which can decrease performance and is generally useless). Use ConcurrrentHashMap instead of Hashtable.
- java中常见的数据结构分类
- java中常见的数据结构
- java中常见异常的结构和分类
- 数据结构中常见的树
- Python中常见的数据结构
- 数据结构中常见的树
- 常见的数据结构java实现
- Java中常见数据结构List之ArrayLis
- Java中常见数据结构List之LinkedLis
- java常见异常分类
- 笔试中常见数据结构的题
- 前端面试中常见的数据结构题
- java 数据结构 常见的排序算法
- JAVA常见的数据结构和算法
- JAVA 中常见异常分类和异常类型
- Java中异常的分类
- Java中锁的分类
- Java中异常的分类
- WindowBuilder入门:使用swt的canvas类构造显示URL图像
- How To Upgrade to Ubuntu 16.04 LTS
- windows2008计划任务无法运行解决方案
- JAVA前后台传递数组方法总结
- SQLAlchemy 中文文档翻译计划
- java中常见的数据结构分类
- HoloLens开发手记 - 空间映射(SpatialMapping)
- C语言基础实例1 — 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- 深入研究Servlet线程安全性问题
- scanf的缓冲区问题
- 记录一个上传头像的bug
- MyBatis学习笔记(一)入门
- velocity 模板库快速生成代码
- 浅析 Android 消息机制