【Java】Java集合框架笔记

今天在QQ群上跟人家交流,错误得把List接口说成了ArrayList的父类,当时脸都红了,不行,一定要跪着回去复习Java,所以把Java的书拿出来,把集合框架的认真仔细的看了一遍,在EverNote上写了一篇笔记,所以搬到博客上来跟大家分享一下.以下就是了.

Java集合框架支持以下两种类型的容器:

  • 一种是为了存储一个元素的集合,简称为集合(collection)
  • 另一种是为了存储键值对,成为图(map)
  • 另外:Java集合框架内的所有实例类都实现了Clonable和Serializable接口,所以他们实例都是可复制和可序列化的.

集合:(一下所有的集合的通用特性都被定义在接口中,而他的是实现是在具体类中提供的)

Java有三种主要类型的集合:规则集(Set)、线性表(List)、队列(Queue)。

  • Set的实例是为了存储一组不可以重复的元素。
  • List的实例是为了存储一个由元素构成的有序集合。
  • Queue的实例是为了存储用于先进先出的方式处理的对象。

集合下的各种实现类:

HashSet类implements了set接口,是Set的子类。

几个方法:

  • contains()方法:是否存在这个元素
  • size方法:得到元素的个数。
  • add方法:添加元素。
  • remove方法:删除一个元素。
  • get方法:没有这个方法,因为没有下标。
  • clear方法:清空Set集合
  • isEmpty方法:判断集合是否为空。
  • iterator方法:得到这个集合的迭代器,用于遍历整个集合。Iterator iterator = set.iterator();
  • hasnext方法
  • next方法

注意:HashSet集合中的元素不允许重复,加上了一个原来有的元素的话,还是只显示一个。

LinkedHashSet类用一个链表实现来扩展HashSet类,它支持对规则集内的元素进行排序(按照他们插入的顺序)

注意:如果不需要维护元素被插入的顺序,就应该使用HashSet,他会比LinkedHashSet更为高效。

TreeSet类实现了SortedSet的具体类NavigableSet类,只要对象是可以被比较的,就可以将他们添加到一个TreeSet中。

几个方法:

  • first()方法:返回TreeSet中的第一个元素.
  • last()方法:返回TreeSet中的最后一个元素.
  • headSet(Object obj)方法:返回treeSet中obj对象前面的所有的元素.
  • tailSet(Object obj)方法:返回treeSet中obj对象和他之后的所有元素.

List接口扩展了Collection接口,来定义一个允许重复的有序集合.

几个方法:

  • add(index, element)方法:用于指定下标处插入一个元素.
  • addAll(index, collection)方法:在指定下标中插入一个集合.
  • remove(index)方法:删除指定下标的元素.
  • indexOf(element)方法:用于获取指定元素在线性表中第一次出现的下标.
  • lastIndexOf(element)方法:用于获取指定元素在线性表中最后一次出现的下标.
  • subList(fromIndex, toIndex)方法:用于获取一个子线性表.
  • listIterator()/listIterator(startIndex)方法用于获取迭代器对象.
  • add(element)方法:将指定元素插入到线性表中.

List的两种实现方式:

  • 数组线性表类ArrayList: 用数组来存储元素,这个数组是动态创建的.如果空间不够的话,就创建一个更大的数组,把原来的数组复制进去.
  • 链表类LinkedList: 在一个链表中存储元素.

Collections类中包含的操作线性表和集合的静态方法:(注意这里的Collections是一个类,要和collection接口严格区分)

几个方法:

  • sort(list : List)方法:对指定的list列表进行排序
  • sort(list : List, c : Comparator)方法:使用comparator对指定的列表进行排序.
  • binarySearch(list : List, key : Object): int方法:使用二分查找来查找key
  • binarySearch(list : List, key : Object, c Comparator): int方法:使用比较器和二分查找来查找key
  • renverse(list : List)方法:对列表进行逆序.
  • reverseOrder(list : List) : Comparator方法:返回逆序的比较器.
  • shuffle(list : List)方法:随机打乱

性能比较:

set比list更加高效. 具体: HashSet > LinkedHashSet > TreeSet > ArrayList > LinkedList.

向量类Vector和Stack

Vector类实现了List接口,除了包含用于访问和修改向量的同步方法外,Vector类和ArrayList是一样的.同步方法是用来防止两个或多个线程同时访问摸个向量的时候引起数据损坏.

stack类是作为Vector类的扩展来实现的

几个方法:

  • Stack()方法:创建一个空的栈.
  • empty() : boolean 方法:如果栈为空的话,返回true.
  • peek() : E 方法:返回栈顶元素.
  • pop() : E 方法:返回并删除栈顶元素.
  • push(o : E) : E 方法:在栈顶增加一个新的元素.
  • search(o : Object) : int 方法:返回栈中指定元素的位置

队列和优先队列

Queue接口用附加的插入 提取 和检验操作 来扩展java.util.Collection.

几个方法:

  • offer(element : E) : boolean 方法:相对类中插入一个元素.
  • poll() : E 方法:获取并删除队列头, 如果队列为空则返回null
  • remove() : E方法:获取并删除队列头, 如果队列为空则抛出异常
  • peek() : E 方法: 获取但不删除队列头, 如果队列为空则返回null
  • element() : E 方法: 获取但不删除队列头, 如果队列为空则抛出异常

双端队列Deque和LinkedList

LinkedList实现了Deque接口,Deque又扩展了Queue接口,因此可以使用LinkedList来创建一个队列.

Deque支持在两端插入和删除元素.deque是双端队列(double end queue)的简称,发音为deck.

几个方法:

  • addFirst():
  • removeFirst():
  • addLast():
  • removeLast():
  • getFirst():
  • getLast():

PriorityQueue实现了一个优先队列,默认情况下使用Comparable以元素的自然顺序进行排序,拥有最小数值的严肃被赋予最高优先级,因此最先从队列中删除.


:用来存储键值对,键值可以使任意的类型,键不能重复,每个键对应一个值

图的类型有三种: 散列图(HashMap)  链式散列图 (LInkedHashMap)   树形图(TreeMap).

Map接口提供了查询 更新 获取集合的值和集合的键值的方法,如下:

  • clear() : void 方法:删除图中的所有条目.
  • containKey(key : Object) : boolean 方法:如果图包含了指定键值对应的条目则返回true.
  • containsValue(value : Object) : boolean 方法:如果图将一个或多个键值映射到特定值则返回true
  • entrySet() : Set<Map.Entry<K, V>> 方法: 返回一个包含途中条目的规则集
  • get(key : Object) : V 方法: 返回图中指定条目对应的值.
  • isEmpty() : boolean 方法:如果图中不包含任何条目则返回true
  • keySet() : Set<K> 方法:返回包含图中键值的一个规则集
  • put(key : K, value : V) : V 方法:将一个映射放入图中.
  • putAll(m : Map<? extends K, ? extends V>) : void 方法:将所有来自m的条目添加到图中
  • remove(key : Object) : V 方法:删除指定键值对应的条目
  • size() : int 方法:返回条目的数目
  • values() : Collection<V> 方法:返回包含图中值得集合

要点:

  • Entry是Map接口中的一个内部接口
  • sortedMap接口扩展了Map接口.他还有附加的方法firstKey()和lasstKey()来返回最低值键和最高值键,heapMap(toKey)方法返回键值小于toKey的那部分图,而tailMap(fromKey)返回键值大于或等于fromKey的那部分图.
  • 对于定位一个值,插入一个映射以及删除一个映射而言,hashMap是高效的.
  • LinkedHashMap类用链表实现来扩展HashMap类,它支持图中的条目的排序.HashMap是不支持排序的.但是在LInkedHashMap中,元素既可以按照插入的顺序进行排序,也可以按照他们被最后一次访问是的顺序,从最早到最晚排序.
  • TreeMap在遍历排好序的键值时是很高效的.
时间: 2024-10-13 00:41:14

【Java】Java集合框架笔记的相关文章

java的集合框架之一

java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木,当然美其名曰,论农民工搭积木的艺术修养.不难,但是东西很多,经验在里面是一个相当重要的东西.以上纯属每天扯淡,笑看即可,毕竟我目前就是个渣java程序员. java的集合框架以collection接口当作基础,这个接口定义了基本框架,包括size.hashcode.iterator.add.add

java.util 集合框架集合

java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Collection接口,并提供了iterator()方法来返回一个迭代器.用add()方法添加对象,remove方法()删除元素,clear()删除集合所有元素(size=0),contains()方法查看集合是否包含对象,toArray()方法返回集合元素数组,equals()方法比较两个集合是否相等,s

java的集合框架最全详解

java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework). Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这

Java的集合框架最全详解(图)

纯个人整理,如有错误请指正. java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework). Java程序员在具体应用时,不必考虑数据

Java:集合框架的工具类

集合框架的工具类 Arrays:里面都是静态方法,直接用来对各种集合进行操作的公有方法. Collections:里面都是静态方法,直接用来对各种集合进行操作的公有方法. 包括: 1.asList将数组变成list集合: static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表. //例子1: import java.util.*; class ArraysTest { public static void sop(Object o

Java 之 集合框架(JCF)

1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点:元素类型可以不同,集合长度可变,空间不固定 c.集合框架:提供了管理集合的接口和类 2.Collection 与 Collections a.Collection:是一个接口,装东西的集合接口 (核心接口) b.Collections:是一个算法类,操作即可的算法类 3.Collection Col

JAVA常用集合框架用法详解基础篇一之Colletion接口

首先,在学习集合之前我们能够使用的可以存储多个元素的容器就是数组. 下面举几个例子主要是引出集合类的: 1.8,4,5,6,7,55,7,8  像这样的类型相同的可以使用数组来存储,本例可以用int[] arr来存储. 2."zhnagsan",true,68 像这样的可以使用StringBuilder或者StringBuffer来存储,但最终需要使用.toString()的方法转换成字符串才可以使用.即 变为:"zhnagsantrue68". 3."李

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

java之集合框架

1.集合的由来: 我们学习的是面向对象的语言.而面向对象语言对事物的描述是通过对象体现的.为了方便对多个对象进行操作,我们就必须把多个对象进行存储.而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量.在我们目前所学过的知识里面,有哪些是容器类型的呢?数组和StringBuffer.但是StringBuffer的结果是一个字符串, 不一定符合我们的要求,所以我们只能选择数组,这就是对象数组.而对象数组又不能适应变化的需求.因为数组的长度是固定的.这个时候,为了适应变化的需求,j