java集合


collection

public interface Collection<E> extends Iterable<E>

List

public interface List<E> extends Collection<E>

特点:线性结构,有序,可重复

LinkedList

public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable

​ 数据结构:双向链表

​ 特点:非线程安全,查询慢,增删快,逻辑连续的空间内存(物理可不连续),内存利用率高

​ 备注:可把LinkedList当做队列使用,额外实现了Queue接口(非直接实现,通过实现Queue的子接口Deque间接实现Queue),所以有offer(E)从尾部添加数据,peek()返回第一个元素但不出队,poll()返回第一个元素并出队

ArrayList

public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable

​ 数据结构:数组

​ 特点:非线程安全,查询快,增删慢,内存利用率低,物理连续的空间内存,可改变大小

​ 备注:性能比Vector好,因为不能同步,只适用单线程

Vector

public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable

​ 数据结构:数组

​ 特点:线程安全,查询快,增删慢,内存利用率低,物理连续的空间内存,可改变大小

​ 备注:性能弱于ArrayList,需要同步

Stack

public class Stack<E> extends Vector<E>

​ 数据结构:栈

​ 特点:线程安全,后进先出,last in first out

​ 备注:通过五个操作对类Vector进行了扩展,class Stack extends Vector ,pop(),peek()方法加了synchronized

queue

public interface Queue<E> extends Collection<E>

特点:先进先出,first in first out

PriorityQueue

public class PriorityQueue<E> extends AbstractQueue<E>
implements java.io.Serializable

​ 数据结构:动态数组(类似ArrayList)

​ 特点:非线程安全,确保集合元素处于有序状态,不允许null

​ 备注:优先级队列就是堆,可做小根堆,大根堆使用,性能较高,iterator()中提供的迭代器并不保证以有序的方式遍历PriorityQueue中的元素

Deque

public interface Deque<E> extends Queue<E>

​ 数据结构:双端队列

​ 特点:即可当队列使用,又可以当栈使用,满足FIFO,LIFO,同时具备栈和队列的特点

​ 备注:Stack过于古老,可以用Deque来代替

ArrayDeque

public class ArrayDeque<E> extends AbstractCollection<E>
implements Deque<E>, Cloneable, Serializable

​ 数据结构:循环数组

​ 特点:非线程安全,数组内任何一个位置,可当起点,来遍历整个数组,内部维持两个变量,表示ArrayDeque的头和尾,性能:当栈使用时 > Stack;当队列使用时 > LinkedList

​ 备注:需要注意其添加元素和扩容过程,方法有:addFirst(e),addLast(e),offerFirst(e),offerLast(e),pollFirst(),pollLast()等等,注:平时使用尽量用offer,因为失败不抛出异常,当然也可视情况而定。

BlockingQueue

public interface BlockingQueue<E> extends Queue<E>

​ 数据结构:一种阻塞的FIFO,队列

​ 特点:线程安全,每一个BlockingQueue都有一个容量,当容量满时,插入元素就会阻塞;当容量为空时,取元素也会阻塞。

​ 备注:其实现类,有很多。ArrayBlockingQueue(基于数组),LinkedBlockingQueue(基于链表),PriorityBlockingQueue(堆),DelayQueue,SynchronousQueue,LinkedTransferQueue,LinkedBlockingDeque。

set

public interface Set<E> extends Collection<E>

特点:离散结构,无序,不可重复元素,最多包含一个null元素

TreeSet

public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable

​ 数据结构:红黑树

​ 特点:非线程安全,可排序(有序的),根据红黑树结构来查找元素位置

​ 备注:自然排序(调用集合中元素所属类的Comparable接口来比较元素之间的大小关系),定制排序(通过Comparator接口实现compare(T o1, T o2) 来比较),添加对象到TreeSet一定,则该对象的类一定要实现Comparable接口,否则会出现异常。TreeSet只能添加一种类型的对象,否则会抛出异常。

HashSet

public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable

​ 数据结构:HashMap

​ 特点:线程不安全,不保证元素的顺序,根据元素的hashCode值决定元素的位置,存取,查询效率高

​ 备注:HashSet基于HashMap实现,判断两个元素相等的标准:equals() & hashCode() 返回值都相等,

LinkedHashSet

public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable

​ 数据结构:HashMap

​ 特点:使用链表维护元素的顺序,使得元素保持插入时的顺序,访问顺序=添加顺序,可以按插入顺序遍历的HashSet

​ 备注:判断元素相等,同HashSet

EnumSet

public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E>
implements Cloneable, java.io.Serializable

​ 数据结构:位向量

​ 特点:非线程安全,集合有序,所有元素必须是指定枚举类型的枚举值

​ 备注:性能高效,以位向量的形式存储,结构紧凑、高效,且只存储枚举类的枚举值

map

public interface Map<K,V>

特点:键值对,键(唯一),值(可重复)

备注:通过key,可在O(1)的时间内查找到value

HashMap

public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable

​ 数据结构:数组,单链表,红黑树

​ 特点:线程不安全,插入值是随机乱序的,即插入顺序!=访问顺序,性能最高。key可有一个null。

​ 备注:无特殊要求,优先使用

LinkedHashMap

public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>

​ 数据结构:在HashMap的基础上,新增了双向链表

​ 特点:保存了插入时的顺序,在迭代时,维护双向链表以此保证其顺序性,性能弱于HashMap

​ 备注:要求其访问顺序==插入顺序时,使用

TreeMap

public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable

​ 数据结构:红黑树

​ 特点:可根据key来排序,通过Comparator传入,可自定制的排序,性能最慢

​ 备注:要求排序时,使用

Hashtable

public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable

​ 数据结构:与HashMap类似

​ 特点:线程安全,key不能为null,性能不如HashMap(因为需要同步)

collections

​ 是一个工具类,提供一系列的静态方法来辅助容器的操作

collections与Arrays的区别:

常用操作方法:

`// 主要功能有:搜索元素、获取最大最小值、排序集合、对象线程安全化、将1个List所有元素复制到另1个 等
// 1. 获取最大最小值
static T max(Collection<? extends T> coll, Comparator<? super T> comp);
static T min(Collection<? extends T> coll, Comparator<? super T> comp);

// 2. 排序
static void sort(List list, Comparator<? super T> c);

// 3. 将线程不安全的Collection转为线程安全的Collection
static Collection synchronizedCollection(Collection c);
static List synchronizedList(List list);
static Map<K,V> synchronizedMap(Map<K,V> m);
static Set synchronizedSet(Set s);

// 交换指定位置的两个元素
static void swap(List<?> list, int i, int j)

// 主要操作对象 = 集合类 = Collection接口的实现类
List list = new ArrayList();
list.add(XXX);
//···
list.add(XXX);

Collectoions.sort(list);`

总结

Java集合学习总结的更多相关文章

  1. 转:深入Java集合学习系列:HashSet的实现原理

    0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特 ...

  2. 2019/3/4 java集合学习(二)

    java集合学习(二) 在学完ArrayList 和 LinkedList之后,基本已经掌握了最基本的java常用数据结构,但是为了提高程序的效率,还有很多种特点各异的数据结构等着我们去运用,类如可以 ...

  3. 2019/3/2周末 java集合学习(一)

    Java集合学习(一) ArraysList ArraysList集合就像C++中的vector容器,它可以不考虑其容器的长度,就像一个大染缸一 样,无穷无尽的丢进去也没问题.Java的数据结构和C有 ...

  4. Java集合学习(9):集合对比

    一.HashMap与HashTable的区别 HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.Hash ...

  5. java集合学习(2):Map和HashMap

    Map接口 java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map. Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含 ...

  6. 深入java集合学习1-集合框架浅析

    前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...

  7. java集合学习一

    首先看一下java集合的关系图 1.1从全面了解Java的集合关系图.常见集合  list  set map等其中我们最常用的 list  map 结合.几天说一下常见的map.map在我工作的两年里 ...

  8. Java 集合学习--HashMap

    一.HashMap 定义 HashMap 是一个基于散列表(哈希表)实现的键值对集合,每个元素都是key-value对,jdk1.8后,底层数据结构涉及到了数组.链表以及红黑树.目的进一步的优化Has ...

  9. java集合学习(1):集合框架

    集合 Collection(有时候也叫container)是一个简单的对象, Java集合工具包位于Java.util包下,Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工 ...

随机推荐

  1. UML类图10分钟快速入门 - From 圣杰

    虚线箭头指向依赖: 实线箭头指向关联: 虚线三角指向接口: 实线三角指向父类: 空心菱形能分离而独立存在,是聚合: 实心菱形精密关联不可分,是组合: 原文作者:圣杰 原文地址:http://www.j ...

  2. 关于HTML、CSS、JavaScript三者关系的简述

    总述 我对于网页这部分的理解吧,对于静态网页来说,无非分为三部分:第一部分.HTML,第二部分.CSS,第三部分.JavaScript(这部分暂且放一边).这俩个给我的第一印象就是,这你妹的都是一串串 ...

  3. Python_文本操作

    #向文本文件中写入内容 s='Hello world\n文本文件的读取方法\n文本文件的写入方法\n' f=open('sample1.txt','a+') #打开文件 f.write(s) #写入文 ...

  4. 在线引用js资源积累

    [jQuery]https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js[Vue]https://cdnjs.cloudfla ...

  5. CSS伪类详情

    参考:http://blog.csdn.net/Panda_m/article/details/50084699

  6. ps命令手册

    LINFO ps命令   在PS(即,处理状态)命令被用来提供关于当前正在运行的信息的过程,包括它们的过程标识号(PID)来. 过程也称为任务,是程序的执行(即运行)实例.系统为每个过程分配一个唯一的 ...

  7. 关于ArrayList的5道面试题

    我以面试官的身份参加过很多Java的面试,以下是五个比较有技巧的问题,我发现有些初级到中级的Java研发人员在这些问题上没有完全弄明白,似懂非懂.所以我写了一篇相关的文章,帮助初级Java研发人员弄清 ...

  8. nodejs-2.httpfuwu

    一.使用nodejs的http服务:处理 "请求或响应" 数据 要使用 HTTP 服务器与客户端,需要 require('http'). Node.js 中的 HTTP 接口被设计 ...

  9. Collection集合详解

    /*Collection--List:元素是有序的,元素可以重复.因为该集合体系有索引. ---ArrayList;底层的数据结构使用的是数组结构.特点:查询速度很快.但是增删很慢.线程不同步 --- ...

  10. Pandas的函数应用、层级索引、统计计算

    1.Pandas的函数应用 1.apply 和 applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df = pd.DataFrame(np.random ...