自己总结了下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 their compareTo() method (or an externally supplied Comparator). Additionally, it implements the SortedMap 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中常见的数据结构分类相关推荐

  1. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  2. JAVA中常见的Exception

    这篇文章转载自 : JAVA中常见的Exception 常见的几种如下: NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常. I ...

  3. Java中常见的十八种异常!

    作为一只敬业的程序员,就是不能接受我的编程出现bug!可见我们对bug是如此的深恶痛觉!它已成为我们职业生涯中的拦路虎,所以今天小千精心为大家总结一下Java中常见的几种异常,望大家多多注意. 1.j ...

  4. Java中的数组数据结构需要了解的要点

    首先,数组是Java中的对象.它们不是像int.short或long这样的基本类,也不是具有很多方法的全功能对象,但由于它们是对象,所以它们隐式地扩展了Object,这就是为什么可以使用数组引用(例如 ...

  5. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  6. java中常见的几种内部类,你会几个?(未完)

    点击上方蓝色关注我们! 大家好,我是雄雄,今天给大家介绍的是java中的几种内部类. java中常见的几个内部类,你会几个?我会四个! 在看每个新知识点时,我们不禁有这样或者那样的疑问,比如它是什么? ...

  7. java中常见的专业术语单词缩写,看你认识几个

    java中常见的专业术语单词缩写,看你认识几个 单词全称 单词缩写 中文意思 备注 Garbage Collection GC 垃圾回收 Object Oriented Programming OOP ...

  8. java中常见的包类接口_Java中一些常用的类,包,接口

    类:1.java.lang.Object 2.java.lang.String 3.java.lang.System 4.java.io.file 5.java.io.FileInputStream ...

  9. Java中常见RuntimeException与其他异常表及Exception逻辑关系详解

    Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...

最新文章

  1. p6安装后怎么连接oracle的数据库,p6-oraclexe数据库连接不上处理方法内部版20151012.doc...
  2. android 编译之后黑屏_android 模拟器用3.18的内核无法启动,一直黑屏。
  3. python3 多维数组 NumPy ndarray 简介
  4. 无法安装ie8,因为其他程序或更新正在等待重启您的计算机,ie8 因为其他程序或更新正在等待重新启...
  5. 测试isEmpty null 方法
  6. Go gin其他数据类型渲染
  7. 小米5点位图_最新!地铁5号线、6号线部分车站文化墙设计出炉!你选哪个?
  8. Qt工作笔记-时QLabel具有点击事件(使用EventFilter)
  9. python rtsp转换为图片_化异为同,Python 在背后帮你做的转换
  10. 1093 字符串A+B (20 point(s)) - PAT乙级真题
  11. go 公众号 关注 监听_golang微信公众平台之消息接入
  12. [转载] Python导出Excel图表
  13. XP下安装ubuntu双系统
  14. sha256算法_以太坊2.0将弃用Keccak256,而启用SHA256哈希算法?
  15. 一个可以在线播放解析m3u8,mp4的网站 m3u8player.lantianye3.top
  16. vscode生成的.BROWSE.VC.DB文件超大问题
  17. 英语单词记忆 词源法-思维导图(19)词源st/sist/stat/stin/stem-236
  18. Throttling
  19. 只有浏览器显示找不到服务器dns
  20. 区块链正在颠覆的18个行业

热门文章

  1. pfa100_什么是PFA?
  2. libpython3.7m so静态库_libpython3.7m.dll
  3. java eight,Java语法基础学习DayEight
  4. java 协议开发_用Java的NIO开发网络协议
  5. html取消重复,减少重复的HTML代码
  6. 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。...
  7. CSS单位em是相对于父元素还是当前元素的字体大小?
  8. Media Session API 为当前正在播放的视频,音频,提供元数据来自定义媒体通知
  9. 基于tornado的爬虫并发问题
  10. 合格PHP工程师的知识结构