集合框架学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合框架学习笔记相关的知识,希望对你有一定的参考价值。

集合框架

目录

概述

Collection接口和Iterator接口:

Map接口:

工具类Collection和Arrays:

古老的接口类与接口:

一、Java集合类概述:

(一)集合的概念

javaSE包含了由一组类和接口组成的java集合框架(Java Collection Framework,简称JCF),其主要功能是用来将存储的的数据以某种结构组织,并以特定的方式来访问这些数据,其目标是提供一个处理对象集合的通用框架,减少程序员处理不同对象集合石的编码量。Java集合类都位于java.util包中。下图是JCF类图: 技术分享

1.2 Java集合框架的三个核心接口

被添加到集合中的对象被称为一个元素,有的允许重复,有些不允许,就使用equals()方法判断两个元素是否重复,如果返回值为true,就是重复的,示例:

String first = "Hello";

String second  = "Hello";

上面两个元素就是重复的。

集合中的主要区别在于:是否支持重复元素、元素是否有顺序、是否允许添加null元素。据此将对象的存储方式分为三类,分别是:

Set(集):对象容器中的对象没有顺序,且不能重复

List(列表):对象容器中的对象按照索引顺序排列,而且可以有重复的对象。

Map(映射):对象容器中包含一对“键对象-值对象”映射,其中键对象不能重复,值对象可以重复。

2.Collection接口和Iterator接口

2.1 概述

1、Collection接口

在集合框架中,集合(Collection)接口位于List接口和Set接口的最顶端,是两个接口的父接口。Collection接口定义了基本操作——单个元素的操作;数组操作——将集合转化为数组的操作;批量操作——同时对一批元素的操作。

(1)基本操作方法:

isEmpty()方法:

System.out.println(list.isEmpty());

判断一个集合是否为空

iterator()方法:

返回在此 collection 的元素上进行迭代的迭代器

(2)批量操作方法:

containsAll(Collection<?> c);

如果此 collection 包含指定 collection 中的所有元素,则返回 true

(3)数组操作方法:

Object[] toArray();

返回一个包含集合所有元素的array

2、Iterator接口

Iterator接口是一种用于遍历集合的接口——从集合中取出每一个元素的过程。

常用方法:

hasNext()方法:

如果仍有元素可以迭代,则返回 true

next()方法:

返回迭代的下一个元素

remove()方法:

从迭代器指向的 collection 中移除迭代器返回的最后一个元素

2.2 List接口继承自Collection接口,其特点如下:

List接口中的元素是有序的

List通常允许重复元素

List实现类通常支持null

可以通过索引访问List对象容器中的元素

List接口最常用的方法是ArrayList和LinkedList方法。

1、ArrayList方法——构造一个初始容量为 10 的空列表

List list  = new ArrayList();//创建一个新的ArrayList

(1)add(E e)方法:

list.add(1);//可以填加数字,字符各种类型

将指定的元素添加到此列表的尾部

(2)add()方法:

list.add(int index, E element);

index是索引,element是元素——将指定的元素插入此列表中的指定位置

(3)clear()方法:

list.clear();

移除此列表中的所有元素,此调用返回后,列表将为空

(4)contains()方法:

System.out.println(list.contains("a"));

检查列表中列表中是否包含指定的元素,如果是就返回true。

(5)get()方法:

list.get(int index);

返回此列表中指定位置上的元素

(6)remove()方法:

list.remove(int index);

移除此列表中指定位置上的元素,向左移动所有后续元素(将其索引减 1) (7)set()方法:

list.set(int index,E element);

用指定的元素替代此列表中指定位置上的元素

(8)size()方法:

System.out.println(list.size());

返回此列表中的元素个数

2、泛型——允许在定义类、接口时指定类型形式参数,这个类型形式参数将在声明变量、创建对象是确定(即传入的实际参数)。在尖括号中的就是类型形参,这就是泛型的实质:允许在定义接口、类时指定类型形参。示例:

List<Integer> list = new ArrayList<Integer>();

2、 LinkedList实现了双向链功能的列表,不支持快速随机访问。

(1)LinkedList()构造一个空列表。

LinkedList<String> list = new LinkedList<>();//创建链表

(2)常用方法:

add()方法:

list.add(E e);

将指定元素添加到此列表的结尾

add()方法:

list.add(int index,E element);

在此列表中指定的位置插入指定的元素,移动当前在该位置处的元素(如果有),所有后续元素都向右移(在其索引中添加 1)。

addFirst()方法:

list.addFirst(E e);

将指定元素插入此列表的开头,与addLast()方法用法相反

clear()方法:

list.clear();

从此列表中移除所有元素

get()方法:

list.get(int index);

返回此列表中指定位置处的元素

set()方法:

list.set(int index,E element);

将此列表中指定位置的元素替换为指定的元素

size()方法:

System.out.println(list.size());

返回此列表的元素数

toArray()方法:

System.out.println(list.toArray());

返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组

3、LinkedList和ArrayList的选择问题

ArrayList采用数组的形式存储对象,将对象放在连续的位置中,它的最大的缺点是进行插入或删除操作时非常麻烦。LinkedList不支持快速随机访问,如果要访问LinkedList中的第n个元素,必须从头开始查找,所以访问LinkedList元素效率低下。

如果需要快速存取,但不经常插入和删除操作,选择ArrayList要好一些;如果要对列表进行频繁插入删除操作,就应该选择LinkedList。

2.2 Set接口——特点:

容器中不能包含重复元素。

元素可能有顺序,也可能没有

因为可能没有顺序,所以不能基于索引访问Set中的元素

1、HashSet类

(1)该类基于哈希算法的Set接口实现,主要有以下特点:

  • 遍历时,其中的元素是没有顺序的;
  • HashSet中不允许出现重复元素;
  • 允许包含null元素

(2)HashSet()——构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。

Set<String> set = new HashSet();//实例化一个HashSet对象

add()方法:

set.add(E e);

将指定元素添加到此列表的结尾

clear()方法:

set.clear();

从此列表中移除所有元素

contains()方法:

System.out.println(set.contains(Object o));

如果此 set 包含指定元素,则返回 true

isEmpty()方法:

System.out.println(set.isEmpty());

如果此 set 不包含任何元素,则返回 true

size()方法:

System.out.println(set.size());

返回此 set 中的元素的数量(set 的容量)

2、TreeSet类

(1)该类不仅实现类Set接口,还实现SortedSet接口,保证集合的对象按照一定的顺序排序,但是这种排序不是按照对象的添加顺序排序,而是按照一定的算法来排序——字典排序。

(2)TreeSet()——构造一个新的空 set,该 set 根据其元素的自然顺序进行排序

Set<String> set = new TreeSet<String>();//实例化一个TreeSet对象

add()方法:

set.add(E e);

将指定元素添加到此列表的结尾

clear()方法:

set.clear();

从此列表中移除所有元素

contains()方法:

System.out.println(set.contains(Object o));

如果此 set 包含指定元素,则返回 true

ceiling()方法:

set.ceiling(E e);

返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null

remove()方法:

System.out.println(set.remove(Object o));

将指定的元素从 set 中移除(如果该元素存在于此 set 中)

last()方法:

set.last();

返回此 set 中当前最后一个(最高)元素

size()方法:

System.out.println(set.size());

返回 set 中的元素数(set 的容量)

2.3 Map接口

Map(映射)接口是java集合框架中不同于Collection接口的另一个重要接口,它对应的是一种从键(key)到值(Value)的对应关系的集合。Map类型容中存在两组对象,key和value可以是任何引用类型的数据,key不能重复,value值可以重复。Map接口的实现类中最常用的是HashMap和TreeMap。

1、HashMap类

该类基于哈希算法的Map接口的实现。HashMap将它的键保存在哈希表中进行维护,键是唯一的。

2、HashMap()——构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap

Map<Integer String> map = new HashMap();///创建一个新的HashMap

clear()方法:

map.clear();

从此映射中移除所有映射关系,此调用返回后,映射将为空

get(Object key)方法:

map.get(Object key);

返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null

isEmpty()方法:

System.out.println(map.isEmpty());

如果此映射不包含键-值映射关系,则返回 true

keySet()方法:

map.keySet();

返回此映射中所包含的键的 Set 视图

put()方法:

map.put(K key,V value);

在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替换。

remove()方法:

map.remove(Object key);

从此映射中移除指定键的映射关系(如果存在)

size()方法:

System.out.println(map.size());

返回此映射中的键-值映射关系数

values()方法:

System.out.println(map.values());

返回此映射所包含的值的 Collection 视图

2、TreeMap类

TreeMap中键的存放方式与TreeMap中的元素相似,它将键存放在树中,键的顺序按照自然顺序或者自定义顺序排列。

TreeMap()——使用键的自然顺序构造一个新的、空的树映射

Map<Integer String> map = new TreeMap();创建一个新的TreeMap

ceilingKey()方法:

map.ceilingKey(K key);

返回大于等于给定键的最小键;如果不存在这样的键,则返回 null

clear()方法:

map.clear();

从此映射中移除所有映射关系,在此调用返回之后,映射将为空

get()方法:

map.get(Object key);

返回指定键所映射的值,如果对于该键而言,此映射不包含任何映射关系,则返回 null

put()方法:

map.put(K key,V value);

将指定值与此映射中的指定键进行关联。如果该映射以前包含此键的映射关系,那么将替换旧值

remove()方法:

map.remove(Object key);

如果此 TreeMap 中存在该键的映射关系,则将其删除

size()方法:

System.out.println(map.size());

返回此映射中的键-值映射关系数

floorKey()方法:

map.floorKey(K key);

返回小于等于给定键的最大键;如果不存在这样的键,则返回 null

keySet()方法:

System.out.println(map.keySet());

以上是关于集合框架学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记29(集合框架三:泛型)

集合框架学习笔记

Java基础学习笔记十六 集合框架

Java学习笔记32(集合框架六:Map接口)

学习笔记:python3,代码片段(2017)

Java学习笔记33(集合框架七:Collections工具类)