一 集合和数组

因为本人也是个go的爱好者,所以对于集合类算是摸的比较透的。

说到集合,必须了解数组和集合。

Java的数组长度固定,集合长度不定。集合是特定的数据结构的集合。

而go里面并没有集合,而是叫数组,切片和键值对。数组同样长度固定,切片键值对长度不固定,键值对是k-v结构。

go和Java的不同就是,切片和键值对要自己写方法成为特定的数据结构,才能合Java的集合类差不多。

也就是说Java的集合其实是Java开发者为了开发方便,定义的一系列数据结构的。那么只要理解java几个数据结构的特性那么就很好理解了。

二 基本接口 map,Iterable,collection

最上层的接口

map和Iterable。

map是键值对,Iterable是集合的迭代子。迭代子理解起来,就是集合每个元素的一个包装

次顶层的接口

collection实现Iterable接口,提供了按索引取值的方法。

这里可以看出collection对应go的切片,map和map对应。

三 数据类型接口 map,list,set

list,set实现collection接口。

list是有序,可重复的数据。

set是无序、不能重复数据。

map是键值对、键不可重复、值可重复。

四 数据功能区分

在上面说的三大类型下,根据线程安全,查询速度快,插入速度快,排序又有四个功能分类。

红色为面试常问结构

排序           TreeSet,LinkedHashSet   TreeMap,LinkedHashMap

线程安全  vector     synchronizedSet       Hashtable,ConcurrentHashMap

查询速度快   ArrayList    HashSet          HashMap

插入速度快   LinkedList  HashSet            HashMap  

list本来就是有序的,所以排序为空。

HashSet,HashMap为什么插入查询快的原因则是,因为用了hash算法。

LinkedHashSet和LinkedHashMap虽然本质上只是HashSet,HashMap实现了排序接口,但是插入的时候就排序,所以较慢。

TreeSet,TreeMap本身是按红黑树结构排序,但也能重写排序接口。

synchronizedSet是Colletions这个工具类里,算是冷门知识点。

五 数据结构的使用

第一,1.8引入了Stream之后,排序基本可以不用了,因为排序的使用次数低,我们不必保证数据插入或者查询一定有序。只需要我们取出来的时候有序即可,而Stream特性则大大的简化了我们自己写排序的代码量。

第二,分布式下考虑单机的线程安全,再用线程安全类简直杀鸡用牛刀。基本上synchronized,lock,原子类,Volidate之类的就能保证分布式下单机的线程安全就行了。

第三,插入速度的考量,降低io操作硬盘操作写操作,基本是每个系统到了后期性能提升一定要考虑的事情,而此时基本使用数组而非集合。

综上,我们基本使用查询快的类就好了。

六 遍历

1.遍历迭代子Iterator,而不直接遍历对象

2.for循环结束,立马回收Iterator

   for (Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
Map.Entry e = (Map.Entry) it.next();
System.out.println("键" + e.getKey() + "的值为" + e.getValue());
}

3.对数据的删除修改操作,要用迭代子实现(否则可能出现线程安全问题)

 for (Iterator<Entry<Long, String>> iterator = map.entrySet().iterator(); iterator.hasNext();) {
Entry<Long, String> entry = iterator.next();
long key = entry.getKey();
if (key < 10) {
iterator.remove();
}
}

JAVA 集合类小结的更多相关文章

  1. Java集合类小结-思维导图

    java集合类分为collection 和 map两类Collection List ArrayList LibnkedList Vector Set HashSet TreeSet LinkedHa ...

  2. java集合类小结

    1 集合的框架体系 List简介 集合的使用场合 List(链表|线性表)和Set(集) java.util.Collection ---| Collection 描述所有接口的共性 ----| Li ...

  3. Java 集合类的细节

    java集合类 1.Collection,Map层次图 2.Collection接口 list 存放有序且允许重复的集合的接口 这里的有序是指存入顺序和取出顺序相同.子类有:{ ArrayList,L ...

  4. Java集合类--温习笔记

    最近面试发现自己的知识框架有好多问题.明明脑子里知道这个知识点,流程原理也都明白,可就是说不好,不知道是自己表达技能没点,还是确实是自己基础有问题.不管了,再巩固下基础知识总是没错的,反正最近空闲时间 ...

  5. 做JavaWeb开发不知Java集合类不如归家种地

    Java作为面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储.但是使用数组存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容 ...

  6. 【转载】Java集合类Array、List、Map区别和联系

    Java集合类主要分为以下三类: 第一类:Array.Arrays第二类:Collection :List.Set第三类:Map :HashMap.HashTable 一.Array , Arrays ...

  7. 摘抄转载前辈们的Java集合类总结

    本文摘自 Blue Sky:http://www.cnblogs.com/hubcarl JAVA 集合类介绍和使用 类关系示意图Iterable(接口) │ └--Collection (接口) ├ ...

  8. Java集合类简单总结(重学)

    java集合类简介(重学) 一.Collection(集合).Map接口两者应该是平行关系吧. 1.Map介绍 Map是以键值(key-value)对来存放的,2个值.通过key来找到value(例: ...

  9. Java中文编码小结

    Java中文编码小结 1. 只有 字符到字节 或者 字节到字符 的转换才存在编码转码; 2. Java String 采用 UTF-16 编码方式存储所有字符.unicode体系采用唯一的码点表示唯一 ...

随机推荐

  1. AJAX经常遇到的那些问题

    本文主要介绍了AJAX工作原理以及在面试题经常会遇到的问题,目录如下: 什么是Ajax 为什么要使用Ajax? Ajax特点? AJAX优缺点? Ajax流程? XMLhttprequest对象 AJ ...

  2. MS SQL update set select

    有张表a,已经有数据 再有张表b,也已查询出数据 两张表有外键关联 需求如下: 更新表a中的某个字段,这个字段要加上(都是int型的数据)对应表b中的数据作为更新的最终数据 )) from #libL ...

  3. Spring5.0的第一次尝鲜

    对于这次尝鲜,说白了和Spring5.0的新特性基本没有多大的关系,如果说您不小心进来了,却发发现文章的内容和标题似乎不太匹配,那么我将是非常的抱歉,因为这浪费了您宝贵的时间.但是我还是要说:因为这确 ...

  4. 《Spring实战》系列之Bean的装配-Days01

    1 自动化装配bean Spring通过两个方面实现对bean的自动装配 1 ) 组件扫描(component scaning):Spring会自动发现Spring上下文中的bean 2 ) 自动装配 ...

  5. 【Hadoop】hiveserver2 不能启动端口 10000 开启服务的相关经验总结

    转载来自http://blog.csdn.net/lsttoy/article/details/53490144. 这个问题困扰了我三天,各种查资料踩坑填坑的尝试,终于搞定了这个问题. 首先来品尝下喜 ...

  6. Entity Framework Code-First(9.6):DataAnnotations - StringLength Attribute

    DataAnnotations - StringLength Attribute: StringLength attribute can be applied to a string type pro ...

  7. 【转】lucene4.3.0 配置与调试

    lucene4.3.0 配置与调试 demo lucene的最新版本是4.3.0, http://www.apache.org/dyn/closer.cgi/lucene/java/4.3.0 luc ...

  8. If,for,range混合使用笔记-(VBA视频教程2:使用IF进行逻辑判断)

    -- 新建表格:#单元格a1-a100全部等于1的代码 Sub test() Dim i As Integer For i = To Range( Next End Sub -- 新建表格:#单元格a ...

  9. JAVA对象创建的过程

    Java中一个实例对象被创建的过程 一.类的加载过程 首先,Jvm在执行时,遇到一个新的类时,会到内存中的方法区去找class的信息,如果找到就直接拿来用,如果没有找到,就会去将类文件加载到方法区.在 ...

  10. python之01电脑和操作系统简史

    电脑简史 早期计算方式发展 :手指和石头 ->结绳 ->算筹->计算尺 -> 算盘 19岁时(1642),帕斯卡发明了人类有史以来第一台机械计算机——帕斯卡加法器.它是一种系列 ...