1.集合树状:

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
│├HashSet
│├TreeSet
│├LinkedHashSet
 
Map
├Hashtable
├HashMap
└WeakHashMap
 

2.Collection接口

Collection是最基本的集合接口,一个Collection代表一组object,java jdk不提供collection的实现类,提供了子接口set和list的实现类。所以的collection都提供了一个无参和有参的构造函数,无参即构造一个空的集合,有参则根据大小创建集合。无论Collection的实际类型是什么,它都支持iterator()方法,该方法返回一个迭代器对象,能逐一访问collection里的每一个元素。用法如下:
Iterator it = collection.iterator(); // 获得一个迭代器
    while(it.hasNext()) {
      Object obj = it.next(); // 得到下一个元素
    }
虽然实现类都是实现了set list map接口,但是大多数方法已经在Collection接口里。所以可以这样写
Collection collection = new ArrayList(); 好处在于你转LinkedList的时候不需要修改arraylist的特性方法。还有就是不明确使用哪个集合的时候。
常用方法:
add(E e) // 添加元素,返回Boolean
addAll(Collection<? extend E>) // 可以添加E的子类集合
clear() // 移除所有的元素
contains(object o) // 是否包含某个元素
size() // 集合大小
remove(); //移除某个元素。
 

3.set list map 的具体实现类

 

接口     实现     历史集合类

Set      HashSet
      TreeSet
List     ArrayList     Vector
      LinkedList     Stack
Map      HashMap     Hashtable
      TreeMap      Properties
 

Set:

Set 接口 不允许存在重复的元素,原始方法都是现成的,没有引入新的方法,set实现类依赖添加的对象的equals()和hashcode方法方法来检查是否等同性;
 
set主要两个实现类HashSet和TreeSet
 
考虑到效率,添加到 HashSet 的对象需要采用恰当分配散列码的方式来实现hashCode() 方法。虽然大多数系统类覆盖了 Object 中缺省的 hashCode()实现,但创建您自己的要添加到 HashSet 的类时,别忘了覆盖 hashCode()。
 
当你需要集合按一定顺序排列的话使用TreeSet,但是添加的时候效率低于HashSet,一般的做法是先用HashSet存储,完成之后再转成TreeSet
 

list:

list接口允许存在重复的元素。
List 接口在 iterator、add、remove、equals 和 hashCode 方法的协定上加了一些其他约定,超过了 Collection 接口中指定的约定。为方便起见,这里也包括了其他继承方法的声明
最常用的两个实现类ArrayList 和LinkedList 前者基于线性表实现,后者基于链表实现。区别在于:
LinkedList 插入快,读慢
ArrayList 读快,插入慢
 

set和list区别

Collection是集合接口
    |————Set子接口:无序,不允许重复。
    |————List子接口:有序,可以有重复元素。
    区别:Collections是集合类
    Set和List对比:
    Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
    List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
    Set和List具体子类:
    Set
     |————HashSet:以哈希表的形式存放元素,插入删除速度很快。
    List
     |————ArrayList:动态数组
     |————LinkedList:链表、队列、堆栈。
    Array和java.util.Vector
    Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。
 
 

Map:

Map 接口不是 Collection 接口的继承。而是从自己的用于维护键-值关联的接口层次结构入手。按定义,该接口描述了从不重复的键到值的映射。
主要实现类是:HashMap linkedHashMap treeMap hashTable
常用的方法:
Object put(Object key, Object value)返回值是被替换的值。
Object remove(Object key)
void putAll(Map mapping)
void clear()
Object get(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
 
因为映射中键的集合必须是唯一的,用 Set 支持。因为映射中值的集合可能不唯一,用Collection 支持。最后一个方法返回一个实现 Map.Entry 接口的元素 Set。
Map.Entry 接口
Map 的 entrySet() 方法返回一个实现Map.Entry 接口的对象集合。集合中每个对象都是底层 Map 中一个特定的键-值对。

HashMap 类和 TreeMap 类

在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按顺序遍历键,那么TreeMap 会更好。根据集合大小,先把元素添加到 HashMap,再把这种映射转换成一个用于有序键遍历的 TreeMap 可能更快。
为了优化 HashMap 空间的使用,您可以调优初始容量和负载因子。这个TreeMap 没有调优选项,因为该树总处于平衡状态。
HashMap与HashTable有什么区别?对比Hashtable和HashMap
  HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。
   HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。
   HashMap不是同步的,而Hashtable是同步的。
   迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。
 

总结:

    掌握每个集合的特性和实现方式,将帮助你在实际开发中有着更明确的选择。
 
 
 
 
 
 
 
 

java 集合基础(适用单线程)的更多相关文章

  1. Java 集合基础详细介绍

    一.Java集合框架概述 集合.数组都是对多个数据进行存储操作的结构,简称Java容器.此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt, .jpg, .avi,数据库中).Jav ...

  2. Java 集合基础知识 List/Set/Map

    一.List Set 区别 List 有序,可重复: Set 无序,不重复: 二.List Set 实现类间区别及原理 Arraylist 底层实现使用Object[],数组查询效率高 扩容机制    ...

  3. Java 集合基础入门,看这篇就够了

    集合 1.父接口:Collection java.util.Collection 是进行单对象保存的最大父接口,即每次利用 Collection 接口都只能保存一个对象信息.定义如下: public ...

  4. java集合基础

    集合概念与作用 1现实生活中把很多事物凑在一起就是集合.java中的集合类:是一种工具,就像是容器,存储任意数量的有共同属性的对象. 2在类的内部,对数据进行组织: 简单而快速的搜索大数量的条目 有的 ...

  5. java集合基础篇 简单总结

    昨天晚上看了编程思想4的持有对象,所以把学到看到的一些记记背背的方面给总结一下. java的容器主要分为两类,一个是实现了接口Collection的一类,还有一个是实现了Map接口的一类. 继承Col ...

  6. Java基础19:Java集合框架梳理

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  7. Java Properties集合基础解析

    Java Properties集合基础解析 本期学习的properties集合是项目中经常用到的操作 什么是Properties集合? java.util.Properties集合继承于Hashtab ...

  8. 基础篇:JAVA集合,面试专用

    没啥好说的,在座的各位都是靓仔 List 数组 Vector 向量 Stack 栈 Map 映射字典 Set 集合 Queue 队列 Deque 双向队列 关注公众号,一起交流,微信搜一搜: 潜行前行 ...

  9. [ Java学习基础 ] Java的对象容器 -- 集合

    当你有很多书时,你会考虑买一个书柜,将你的书分门别类摆放进入.使用了书柜不仅仅使房间变得整洁,也便于以后使用书时方便查找.在计算机中管理对象亦是如此,当获得多个对象后,也需要一个容器将它们管理起来,这 ...

随机推荐

  1. JavaEE高级-MyBatis学习笔记

    一.MyBatis简介 - MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. - MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. - My ...

  2. TLS漏洞:超过50万个电子邮件服务器容易受黑客攻击,太可怕了

    2019年在流行的开源Exim电子邮件服务器软件中发现了一个关键的远程执行代码漏洞,至少有超过50万个电子邮件服务器容易受到远程黑客攻击.Exim是一种广泛使用的开源邮件传输代理(MTA)软件,为类似 ...

  3. React native 平时积累笔记

    常用插件: react-native-check-box 复选框react-native-sortable-listview 列表拖拽排序 react-native-doc-viewer 预览组件 r ...

  4. mysql CREATE TABLE语句 语法

    mysql CREATE TABLE语句 语法 作用:创建数据库中的表. 大理石量具系列 语法:CREATE TABLE 表名称 (列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,.... ...

  5. BZOJ 4026: dC Loves Number Theory 可持久化线段树 + 欧拉函数 + 数学

    Code: #include <bits/stdc++.h> #define ll long long #define maxn 50207 #define setIO(s) freope ...

  6. Leetcode 8. String to Integer (atoi)(模拟题,水)

    8. String to Integer (atoi) Medium Implement atoi which converts a string to an integer. The functio ...

  7. Spring Cloud教程(九)应用程序上下文服务

    Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点.Spring Cloud建立在此之上,并添加了一些可能系统中所 ...

  8. 【ArchSummit干货分享】个推大数据金融风控算法实践

    作者:个推高级数据工程师 晓骏 众所周知,金融是数据化程度最高的行业之一,也是人工智能和大数据技术重要的应用领域.随着大数据收集.存储.分析和模型技术日益成熟,大数据技术逐渐应用到金融风控的各个环节. ...

  9. 对象数组(JSON) 根据某个共同字段 分组

    1.在前端页面用js处理 转载https://www.cnblogs.com/rysinal/p/5834446.html 为了第二种方法对比,特意把id 转化为pid var arr = [ {&q ...

  10. How to run a function when the page is loaded?

    How to run a function when the page is loaded? window.onload = codeAddress; should work - here's a d ...