集合家族图

---|Collection: 单列集合---|List: 有存储顺序 , 可重复---|ArrayList:     数组实现 , 查找快 , 增删慢                          ---|LinkedList:    链表实现 , 增删快 , 查找慢   实现了 栈 队列                       ---|Vector:    和 ArrayList 原理相同 , 但线程安全 , 效率略低            ---| Stuck 类 ---|Set: 无存储顺序 , 不可重复---|HashSet  线程不安全,存取速度快。底层是以哈希表实现的---|TreeSet  红 - 黑树的数据结构,默认对元素进行自然排序( String )。如果在比较的时候两个对象返回值为 0 , ,那么元素重复。 Comparable ,Comparator 。---|LinkedHashSet---| Map: 键值对---|HashMap 采用哈希表实现,所以无序---|TreeMap 可以对键值进行排序 ---|HashTable 线程同步 

---|LinkedHashMap 对Map集合进行增删提高效率

      

Connection

Collection 是最基本的集合接口,一个 Collection 代表一组 Object ,即 Collection的元素( Elements )。

一些 Collection 允许相同的元素而另一些不行。一些能排序而另一些不行。

Java SDK 不提供直接继承自 Collection 的类, Java SDK 提供的类都是 继承自Collection 的 “ 子接口 ” 如 List 和 Set 。

所有实现 Collection 接口的类都必须提供两个标准的构造函数:

无参数的构造函数用于创建一个空的 Collection,

有一个 Collection 参数的构造函数用于创建一个新的 Collection ,

这个新的 Collection 与传入的 Collection 有相同的元素。

后一个构造函数允许用户复制一个 Collection 。

Connection 共性方法。
增加:1:add()   将指定对象存储到容器中                   add 方法的参数类型是Object 便于接收任意对象2:addAll() 将指定集合中的元素添加到调用该方法和集合中删除:3:remove() 将指定的对象从集合中删除4:removeAll() 将指定集合中的元素删除修改5:clear() 清空集合中的所有元素判断6:isEmpty() 判断集合是否为空7:contains() 判断集合何中是否包含指定对象          8:containsAll() 判断集合中是否包含指定集合         使用equals()判断两个对象是否相等 获取:   9:int size()    返回集合容器的大小转成数组10: toArray() 

List

List 特有方法
1:增加void add(int index, E element) 指定位置添加元素            boolean addAll(int index, Collection c) 指定位置添加集合
2:删除
E remove(int index) 删除指定位置元素3:修改E set(int index, E element)    返回的是需要替换的集合中的元素
4:查找:E get(int index)             注意: IndexOutOfBoundsExceptionint indexOf(Object o)         // 找不到返回-1lastIndexOf(Object o)
5:求子集合List<E> subList(int fromIndex, int toIndex) // 不包含toIndex   

LinkedList  非同步
链表实现 , 增删快 , 查找慢LinkedList 特有方法
1:方法介绍
addFirst(E e)
addLast(E e)
getFirst()
getLast()
removeFirst()
removeLast()
如果集合中没有元素,获取或者删除元
素抛:NoSuchElementException
2:数据结构LinkedList list = new LinkedList();
1:栈 (1.6) 先进后出push()    入栈pop()     出栈2:队列(双端队列1.5)先进先出offer()      入队poll()      出队peek()       获取队列的头元素,但是不删除peekFirst()  获取队列的头元素,但是不删除peekLast()   获取队列的最后一个元素但是不删除
3:返回逆序的迭代器对象
descendingIterator()   返回逆序的迭代器对象注意:
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:List list = Collections.synchronizedList(new LinkedList(…));

ArrayList  非同步

数组实现 , 查找快 , 增删慢

Vector  同步

Vector: 描述的是一个线程安全的 ArrayList 。ArrayList : 单线程效率高Vector    : 多线程安全的,所以效率低Vector 特有的方法void addElement(E obj)  在集合末尾添加元素E elementAt( int index) 返回指定角标的元素Enumeration elements()  返回集合中的所有元素,封装到Enumeration对象中Enumeration 接口:boolean hasMoreElements() 测试此枚举是否包含更多的元素。 E nextElement() 如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
由 Vector 创建的 Iterator ,虽然和 ArrayList 创建的 Iterator 是同一接口,但是,因为 Vector 是同步的,当一个 Iterator 被创建而且正在被使用,另一个线程改变了 Vector 的状态(例如,添加或删除了一些元素),这时调用 Iterator 的方法时将抛出 ConcurrentModificationException ,因此必须捕获该异常。

Stack 类

Stack 继承自 Vector ,实现一个后进先出的堆栈。Stack 提供 5 个额外的方法使得 Vector 得以被当作堆栈使用。基本的 push 和 pop方法,还有 peek 方法得到栈顶的元素, empty 方法测试堆栈是否为空, search 方法检测一个元素在堆栈中的位置。 Stack 刚创建后是空栈。

迭代器

每一种集合类返回的 Iterator 具体类型可能不同,但它们都实现了 Iterator 接口,因此,我们不需要关心到底是哪种 Iterator ,它只需要获得这个 Iterator 接口即可,这就是接口的好处,面向对象的威力。Iterator it = list.iterator();Itreator    该接口是集合的迭代器接口类,定义了常见的迭代方法1:boolean hasNext() 判断集合中是否有元素,如果有元素可以迭代,就返回true。2: E next()  返回迭代的下一个元素,注意: 如果没有下一个元素时,调用
next元素会抛出NoSuchElementException3: void remove()从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操
作)。

List 特有的迭代器 ListIterator

ListIterator<E> listIterator()---| IteratorhasNext()next()remove()------| ListIterator Iterator子接口 List专属的迭代器add(E e)    将指定的元素插入列表(可选操作)。该元素直接插入到 next 返回的下一个元素的前面(如果有)void set(E o)   用指定元素替换 next 或 previous 返回的最后一个元素hasPrevious()    逆向遍历列表,列表迭代器有多个元素,则返回 true。previous()       返回列表中的前一个元素。

Set

不包含重复的元素HashSetTreeSetLinkedHashSet

Map

注意: Set 的元素不可重复, Map 的键不可重复,如果存入重复元素如何处理Set 元素重复元素不能存入 add 方法返回 falseMap 的重复健将覆盖旧键,将旧值返回。1、添加:1、V put(K key, V value)    (可以相同的key值,但是添加的value值会覆
盖前面的,返回值是前一个,如果没有就返回null)                                          2、putAll(Map<? extends K,? extends V> m)  从指定映射中将所有映射关
系复制到此映射中(可选操作)。
2、删除1、remove()    删除关联对象,指定key对象2、clear()     清空集合对象
3、获取1:value get(key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返
回的是null。3、判断:1、boolean isEmpty()   长度为0返回true否则false2、boolean containsKey(Object key)  判断集合中是否包含指定的key
3、boolean containsValue(Object value)  判断集合中是否包含指定的value
4、长度:
Int size()
遍历Map的方法1、将map 集合中所有的键取出存入set集合。Set<K> keySet()   返回所有的key对象的Set集合再通过get方法获取键对应的值。
2、 values() ,获取所有的值.Collection<V> values() 不能获取到key对象
3、 Map.Entry对象  推荐使用   重点Set<Map.Entry<k,v>> entrySet()
将map 集合中的键值映射关系打包成一个对象
Map.Entry对象通过Map.Entry 对象的getKey,
getValue获取其键和值。// 获取方法:// 第一种方式: 使用keySet// 需要分别获取key和value,没有面向对象的思想// Set<K> keySet() 返回所有的key对象的Set集合Set<Integer> ks = map.keySet();Iterator<Integer> it = ks.iterator();while (it.hasNext()) {Integer key = it.next();String value = map.get(key);System.out.println("key=" + key + " value=" + value);}// 第二种方式:// 通过values 获取所有值,不能获取到key对象// Collection<V> values()Collection<String> vs = map.values();Iterator<String> it1 = vs.iterator();while (it1.hasNext()) {String value = it1.next();System.out.println(" value=" + value);}// 第三种方式: Map.Entry对象 推荐使用 重点// Set<Map.Entry<K,V>> entrySet()// 返回的Map.Entry对象的Set集合 Map.Entry包含了key和value对象Set<Map.Entry<Integer, String>> es = map.entrySet();Iterator<Map.Entry<Integer, String>> it2 = es.iterator();while (it2.hasNext()) {// 返回的是封装了key和value对象的Map.Entry对象Map.Entry<Integer, String> en = it2.next();// 获取Map.Entry对象中封装的key和value对象Integer key = en.getKey();String value = en.getValue();System.out.println("key=" + key + " value=" + value);}

HashMap

底层是哈希表数据结构,线程是不同步的,可以存入 null 键, null 值。 要保证键的唯一性,需要覆盖 hashCode 方法,和 equals 方法。

Map<String, Integer > map1 = new HashMap<String, Integer >();

HashMap<Person, String> hm = new HashMap<Person, String>();

TreeMap

自定义元素排序

class MyComparator implements Comparator<Person> {@Overridepublic int compare(Person p1, Person p2) {if (p1.getAge() > p2.getAge()) {return -1;} else if (p1.getAge() < p2.getAge()) {return 1;}return p1.getName().compareTo(p2.getName());}}

 

Java 容器之 Connection栈队列及一些常用相关推荐

  1. java中定义一个栈容器_Java 容器之 Connection栈队列及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  2. Java 容器之Hashset 详解.

    ? 在之前的博文中本屌已经介绍过java的Collection接口. 作为实现了Collection接口的容器中, List容器无疑是最常用的, 无论是Arraylist, Linklist, Vec ...

  3. Java集合常见数据结构-栈/队列/数组/链表/红黑树

    数组 链表 红黑树

  4. Java容器之HashMap源码解析(视频讲解)

    内容简介:讲解HashMap的底层数据结果.处理逻辑和源码实现.首先通过画图模拟HashMap的数据结果和底层处理逻辑:然后解析put和get方法,印证模拟中的原理:通过解读源码,讲解单向链表转换成红 ...

  5. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  6. 【转】Java并发编程:并发容器之ConcurrentHashMap

    JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了 ...

  7. Java并发编程:并发容器之CopyOnWriteArrayList(转载)

    Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW ...

  8. java 栈 队列 接口_Java队列接口

    java 栈 队列 接口 介绍: 队列是FIFO(先进先出)抽象数据类型(ADT). 换句话说,按插入顺序将元素删除. java.util.Queue是Java 中的接口,并且从java.util.C ...

  9. Java:基于LinkedList实现栈和队列

    1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit;import java.util.L ...

最新文章

  1. OpenStack文件注入相关分析(转载)
  2. Spring Boot 以 jar 包方式运行在后台
  3. 三面腾讯,已拿offer
  4. 中国最大的python社区-python找最大值
  5. BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介、下载、案例应用之详细攻略
  6. 网络爬虫:采用“负载均衡”策略来优化网络爬虫
  7. 科大星云诗社动态20201122
  8. (20):数据的准备工作
  9. Oracle on Azure
  10. [BZOJ1385][Baltic2000]Division expression
  11. 【ZOJ - 3778】Talented Chef(贪心)
  12. 基于链表的两个集合的差集
  13. mysql更改执行计划_11g中 connect by 语句执行计划改变
  14. [c#基础]关于const和readonly常见的笔试题剖析
  15. 水中贵族 || 百岁山的“骚路子”营销
  16. Shawn邀您共读《WebGL编程指南》| GLSL ES篇
  17. 什么是端口映射?如何设置端口映射?
  18. 升级opengl和显卡驱动_到底用不用更新显卡驱动
  19. uni-app开发App上架Apple Store流程(简略版)
  20. Git - git 入门

热门文章

  1. c语言 误差处理 编程,C语言误差处理(平均数残差).doc
  2. 用matlab分析系统工程案例,系统工程ISMmatlab代码.doc
  3. 正则表达式中或关系表示及查找英文字母最后一个
  4. cmd查看开放的端口
  5. SQL Server 轻松解决令你头疼的sa登录
  6. Linux基本命令 帮助命令
  7. 一步一步SharePoint 2007之四十一:实现Search(4)——设定爬网Schedule
  8. 光物联成物联网新热点
  9. Linux主机性能监测
  10. C ~ 指针函数与函数指针的区别