java集合

时间:2024.4.30

Java集合归纳复习

1、集合类概述

java.util包中就包含了一系列重要的集合类,而对于集合类,主要需要掌握的就是它的内部结构,以及遍历集合的迭代模式。

Java2的集合框架,抽其核心,主要有三种:List、Set和Map。如下图所示: Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap

2.集合类特性

(1)几个常用类的区别

ArrayList: 元素单个,效率高,多用于查询

Vector: 元素单个,线程安全,多用于查询

LinkedList:元素单个,多用于插入和删除

HashMap: 元素成对,元素可为空

HashTable: 元素成对,线程安全,元素不可为空

3.接口

(1)List接口

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。List允许有相同的元素。

除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。 实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

LinkedList类

LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:

List list = Collections.synchronizedList(new LinkedList(?));

ArrayList类

ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。

每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

Vector类

Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

Stack 类

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

Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。

很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。

请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

(3)Map接口

请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

Hashtable类

Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。

添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。

Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。

Hashtable是同步的。

HashMap类

HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。 WeakHashMap类

WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

4.collections 和collection

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。


第二篇:java集合


一:集合:升级版的数组。

1:数组的缺点:在操作添加和删除元素以及排序的时候,需要移动大量元素。

2:定义:一种数据结构,在软件开发过程中应用广泛。(购物车的商品列表,播放列表等)

3:Java中使用接口Collection定义集合的概念。

添加元素,删除元素,集合的交并差。

4:Collection的子接口:list有序可重复的;set无序不可重复的; 5:list接口的子类:ArrayList:可变长数组的方式实现线性表集合;(元素是有序,可以重复的)

list接口的子类: LinkedList:双向循环链表的方式实现线性集合(元素是有序,可以重复的)

set接口的子类:HashSet(元素是无序,不可以重复的)

6:list方法:add()增加元素;Remove()删除元素;get(i)取出第i个元素;indexOf()得到某对象在集合中的位置;Contents()//判断某个对象是否在集合中;

7:泛型:集合中通常存放相同对象,功能是可以约束集合中元素的类型,减少编程错误,在泛型中强制或自动转化都是隐形的。(1.5版本以后)

用<>来表示

8:散列表的概念(Hash 哈希算法 / 散列算法)

数据结构:成对存储键值对(key-value).key不能重复,value可以重复

1) 容量:散列数组的大小

2) 散列运算:key->对应散列下标的算法 "Mac".hashCode()%10 -> 3

3) 散列桶:散列值相同的元素的“线性集合”

4) 加载因子(load factor)小于75%

6(元素数量) / 10(散列表容量) = 60%

5) 散列查找:根据key计算散列值,根据散列值找到散列桶,

在散列桶中顺序比较key,如果相同,返回此元素。

6) 散列表中key不同,value可以重复。

散列算法:不可逆的单向函数。key -> f(key)

9:Map:

HashMap 常用方法:

put(key, value)

constainsKey(key) //返回boolean,判断集合中是否包含key值 get(key) //通过key找到value

remove(key) //从集合中去除元素

keySet() //返回key的集合,Set

values() //返回值的结合,Collection

8.集合的迭代(遍历)Iterator

Java API中的接口Iterator描述的逐一遍历的方法。遍历购物车,遍历播放列表

1) Iterator描述了一个线性结构(顺序结构)。有指针(游标)的概念。 指针的初始位置在第一个元素之前。

hasNext():当前指针的下一个位置有没有元素

next():指针下移一位,取出当前位置的元素

2)集合的方法remove /add / set 在迭代过程中不要使用

如果需要在迭代的时候删除集合内容,使用迭代器自己的删除方法:remove 移除当前指针指向的元素。

9.集合元素的排序

1)API : 字符串(已经实现了Comparable接口并重定义了compareTo()方法,按字典排序) / 整型数据

自定义对象类(自定义排序原则)

2)比较器Comparator

数据和比较原则分开。CallBack(回调)方式

Sort();

简单类型-->包装类(封装类)

byte --> Byte

short --> Short int --> Integer

long --> Long

double --> Double fload --> Float

boolean --> Boolean char --> Charater

区别: Comparator,Comparable

Comparable (接口)里面的 compareTo()方法: 自定义排序原则,需要排序的类实现此接口

Comparator compare (): 自定义排序原则,需要和排序的类分开

Collections.sort(list):list中的元素实现了Comparable 接口

Collections.sort(list,比较器实例): list中的元素按照比较器中的规则比较

10:map:一对一对的出现(key-value对,key不能重复,value可

以重复);

collection:一个一个的出现

11:set 接口的子类hashSet

12:HashMap:

Put(key,value)

constainsKey(key):返回boolean,判断集合中是否包含key值 get(key):通过key找到value值

remove(key):从集合中去除

13:集合的迭代(遍历)iterator

14:集合的排序:sort

练习:发牌的过程

对象:牌:card;玩家:player

发牌的过程:

全部的54张牌:Card对象的集合,54个元素

玩家:Player对象集合,N个元素

动作:发牌;

洗牌(打乱)

遍历全部牌的集合(每张牌)顺序发给玩家集合中的每个人; 最后剩下m张牌不发。

看一下每个玩家手里面的每一张牌

Day10/src/card/

更多相关推荐:
Java集合总结

javasetmaptablelist总结1.CollectionListSetMap区别记忆这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面…

java集合总结

一、Array,ArraysJava所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。1、效率高,但容量固定且无法动态改变。array还有一个缺点是,无法判断其中实际存有多少元素,length…

java集合总结

一、数组、集合数组、集合:都是一种容器,用一个对象管理多个对象;数组:不能自动增长;只能存放同类型的元素集合:能自动扩容;部分集合允许存放不同类型的元素;二、学习这些集合类要掌握哪些东西:1)怎样得到(选择)集…

java集合总结

集合.......................................................................................................…

java集合总结

一数组集合数组集合都是一种容器用一个对象管理多个对象数组不能自动增长只能存放同类型的元素集合能自动扩容部分集合允许存放不同类型的元素二学习这些集合类要掌握哪些东西1怎样得到选择集合对象2怎样添加元素3怎样删除元...

Java集合总结

Java基础集合总结1集合体系掌握集合Collection单列底层结构是针和元素有关List有序可重复ArrayList底层数据结构是数组查询快增删慢线程不安全效率高Vector底层数据结构是数组查询快增删慢线...

Java集合框架的知识总结

Java集合框架的知识总结说明先从整体介绍了Java集合框架包含的接口和类然后总结了集合框架中的一些基本知识和关键点并结合实例进行简单分析1综述所有集合类都位于javautil包下集合中只能保存对象保存对象的引...

Java集合框架使用总结

Java集合框架使用总结前言:本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看JavaAPI文档。一、概述数据结构对程序设计有…

java集合类

Java中集合类简介收藏importjava.util.*;publicclassTestset{publicstaticvoidmain(Stringargs[]){Setset=newHashSet();s…

java集合类总结

新疆财经大学java程序设计集合类廖彬1本讲内容集合collection数组和集合90功能相似但是最大的区别是数组在初始化的时候必须确定大小而集合不用而且集合是一堆的类使用起来非常方便讲集合collection...

Java集合类总结2

Java中集合类用法总结CollectionListLinkedListArrayList异步线程不安全空间用完时自动增长原容量一半Vector同步线程安全空间用完时自动增长原容量一倍StackSetHashS...

毕向东java基础总结(完整版)

克己宽容仁德博学厚黑坚毅稳重Java基础知识总结168克己宽容仁德博学厚黑坚毅稳重Java基础知识总结超级经典写代码1明确需求我要做什么2分析思路我要怎么做1233确定步骤每一个思路部分用到哪些语句方法和对象4...

java集合总结(31篇)