集合框架学习笔记
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());
以上是关于集合框架学习笔记的主要内容,如果未能解决你的问题,请参考以下文章