(Java学习随堂笔记)java集合框架介绍、主要接口及常用的实现类、Arrays类、(Vector, ArrayList)、遍历Collection、Map接口及其实现

java集合框架介绍

为了表示和操作集合类型而规定的一种同一的体系结构

java集合框架

对外的接口:表示集合的抽象数据类型
接口的实现:指实现接口的java类,是可重用的数据结构
对集合运算的算法:是指执行算法的方法,例如在集合上进行查找和排序

集合框架接口

声明了对各种集合类型执行的一般操作
在这里插入图片描述

Collection接口

声明了一组操作成批对象的抽象方法
实现它的类:AbstractCollection类(抽象类)
AbstractCollection类

Collection接口的常用方法

查询方法:
int size():返回集合对象中包含的元素个数
boolean isEmpty():判断集合对象中是否还包含元素,如果没有任何元素则返回true
boolean contains():判断对象是否在集合中
boolean containsAll(Collection c):判断方法的接受者对象是否包含集合中的所有元素
修改方法:
boolean add(Object obj):向集合中增加对象
boolean addAll(Collection<?> c):(泛型,?通配符)将参数集合中的所有元素增加到接受者集合中
boolean remove(Object obj):从集合中删除对象
boolean removeAll(Collection c):将参数集合中的所有元素从接受者集合中删除
boolean retainAll(Collection c):在接受者集合中保留参数集合中的所有元素,其它元素都删除
void clear():删除集合中的所有元素

主要接口及常用的实现类

Set接口

对equals和hashCode操作有了更强的约定,如果两个Set对象包含同样的元素,二者便是相等的
实现Set接口的类:
哈希集合(HashSet)及树集合(TreeSet)
其他:Abstractset, ConcurrentSkipListSet, CopyOnWriteArraySet,EnumSet,JobStateReasons, LinkedHashSet

SortSet接口

一种特殊的Set
其中的元素是升序排列的,还增加了与次序相关的操作
通常用于存放词汇表这样的内容
实现它的类:
ConcurrentSkipListSet,TreeSet

List接口

可包含重复元素
元素是有顺序的,每个元素都有一个index值(从0开始)表明元素在列表中的位置
实现它的类:
Vector:
ArrayList:一种类似数组的形式进行存储,因此它的随机访问速度极快
LinkedList:内部实现是链表,适合于在链表中间需要频繁进行插入和删除操作
栈Stack
其他:AbstractList , AbstractSequentialList , AttributeList ,CopyOnWriteArrayList , RoleList , RoleUnresolvedList

Queue接口

除了Collection的基本操作,队列接口另外还有插入、移除和查看操作
FIFO(先进先出)
实现它的类:
LinkedList:
同时也实现了List,先进先出
PriorityQueue:
按元素值排序的队列
其他:AbstractQueue , ArrayBlockingQueue , ArrayDeque,ConcurrentLinkedQueue , DelayQueue , LinkedBlockingDeque,LinkedBlockingQueue , PriorityBlockingQueue , SynchronousQueue

Map接口

用于存放维护键值对
不能有重复的关键字,每个关键字最多能够映射一个值
声明时可以带有两个参数,Map<K,V>,其中K表示关键字的类型,V表示值的类型
实现Map接口的类:
HashMap,TreeMap
其他:AbstractMap , Attributes , AuthProvider , ConcurrentHashMap,ConcurrentSkipListMap , EnumMap , Hashtable , IdentityHashMap ,LinkedHashMap , PrinterStateReasons , Properties , Provider ,RenderingHints , SimpleBindings , TabularDataSupport , UIDefaults,WeakHashMap

Map接口及其子接口的实现

在这里插入图片描述

SortedMap接口

Map的子接口
一种特殊的Map,其中的关键字是升序排列的
通常用于词典和电话目录等
声明时可以带有两个参数,SortedMap<K,V>,其中K表示关键字的类型,V表示值的类型
实现它的类:
TreeMap
ConcurrentSkipListMap(支持并发)基于跳表的一个Map

常用算法

对于集合运算的算法:
大多数算法都是用于操作List对象
有两个(min和max)可用于任意集合对象

排序算法

使List元素按照某种次序关系升序排列
有两种形式:
简单形式只是将元素按照自然次序排列,或者集合实现了 Comparable接口;
第二种形式需要一个附加的 Comparator对象作为参数,用于规定比较规则,可用于实现反序或特殊次序排序。
算法性能
快:时间复杂度nlog(n)
稳定

洗牌算法shuffle

与排序算法作用相反,它打乱List中的任何次序

以随机方式重排List元素,任何次序出现的几率都是相等;
在实现偶然性游戏的时候,这个算法很有用,例如洗牌。

常规数据处理算法:

reverse:将一个List中的元素反向排列
fill:用指定的值覆写List中的毎一个元素,这个操作在重新初始化List时有用。
copy:接受两个参数,目标List和源List,将源中的元素复制到目标,覆写其中的内容。目标List必须至少与源一样长,如果更长,则多余的部分内容不受影响。

查找算法binarySearch

二分法查找算法

使用二分法在一个有序的List中查找指定元素
有两种形式:
List是按照自然顺序升序排列的
增加一个Comparator对象,表示比较规则,并假定List是按照这种规则排序的
检查集合是否实现了RandomAccess接口(是否能够随机访问):
是:二分查找
否:线性查找

寻找最值

用于任何集合对象
min和max算法返回指定集合中的最小值和最大值
这两个算法分别有两个形式:
按元素的自然顺序返回最值
附加一个Comparator对象作为参数,并按照Comparator对象指定的比较规则返回最值

数组实用方法

Arrays类

java.util.Arrays
常用方法:
fill(type[] a ,type val):给数组填充,就是简单的把一个数组全部或者某段数据填成一个特殊的值;
equals(type[] a ,type[] b):实现两个数组的比较,相等时返回true;
sort(type[] a ):对数组排序
binarySearch():对数组元素进行二分法查找
asList(T…a):实现数组到ArrayList的转换
toString(基本类型或object数组引用):实现数组到String的转换

基于动态数组的类型(Vector, ArrayList)

Vector, ArrayList

实现了Collection接口
能够存储相同类型(或具有相同的父类或接口)的对象
不能存储基本类型(primitive)的数据,要将基本类型数据包裹在包裹类中
其容量能够根据空间需要自动扩充
增加元素方法的效率较高,除非空间已满(在此情况下,在增加之前需要先扩充容量)
Vector:集合框架中的遗留类,旧线程安全集合
ArrayList:方法时非同步的,效率较高
Java提供了线程安全集合:Java.util.concurrent包,影响、有续集、队列
任何集合类通过使用同步包装器可以变成线程安全的:
List synchArrayList = Collections.synchronisedList(new ArrayList());

ArrayList构造方法

ArrayList()
构造一个空表,默认容量为10
ArrayList(Collection<>extends E> c)
用阐述集合元素为初始值构造一个表
ArrayList(int initialCapacity)
构造一个空表,容量为initialCapacity

ArrayList其他方法

遍历Collection

遍历实现了Collection接口的集合
通过Enumeration及Iterator接口遍历集合
增强for循环遍历集合
通过聚集操作遍历集合

通过Enumeration及Iterator接口遍历集合

Enumeration/Iterator

能够从集合类对象中提取毎一个元素,并提供了用于遍历元素的方法
Java中的许多方法(如 elements())都返回 Enumeration类型的对象而不是返回集合类对象Enumeration接口不能用于 ArrayList对象,而 Iterator接口既可以用于 Arraylist对象,也可以用于 Vector对象

Iterator接口

是对 Enumeration接口的改进,因此在遍历集合元素时,优先选用Iterator接口。
具有从正在遍历的集合中去除对象的能力。
具有如下三个实例方法
hasNext()–判断是否还有元素。
next()–取得下一个元素。
removed()–去除一个元素。注意是从集合中去除最后调用 next()返回的元素,而不是从 Iterator类中去除。

Iterator接口遍历集合

增强for循环

for(Type a : 集合对象)

import java.util.*;

public class Iteratortester {
    public static void main(String[] args) {
        //*********Iterator*********
        String[] num = {"one","two","three","four","five","six","seven","eight","nine","ten"};
        Vector<String> aVector = new Vector<String>(Arrays.asList(num));
        System.out.println(aVector);
        //遍历向量,Iterator迭代器
        Iterator<String> nums = aVector.iterator();
        while(nums.hasNext()){
            String aString = (String)nums.next();
            System.out.println(aString);
            if(aString.length() > 4) {
                nums.remove();
            }
        }
        System.out.println(aVector);

        //************增强for循环************
        Vector<String> num1 = new Vector<String>();
        num1.add("z");num1.add("zx");
        num1.add("zxc");num1.add("zxcv");
        num1.add("zxcvb");num1.add("zxcvbn");
        num1.add("zxcvbnm");
        Enumeration<String> nums1 = num1.elements();
        for(String str : num1){
            System.out.println(str);
        }
    }
}

通过聚集操作遍历

聚集操作与lambda表达式一起使用

假设有一个实现了 Collection接口的 myShapesCollection集合对象,getColor()可以返回对象的颜色, getName()方法返回对象的名字,则遍历并输出红色对象的名字:
myShapesCollection.stream()		//通过Collection对象取得一个stream
.filter(e->e.getColor()== Color.RED)		//filter过滤
.forEach(e->System.out.println(e.getName())		//

Map接口及其实现

Map接口意义:用于存储“关键字key”和“值value”的元素对,其中每个关机子映射到一个值
当需要通过关键字实现对值的快速存取时使用

Map接口

抽象方法:
查询
修改
两个主要实现类:
HashTable
HashMap

Map接口的查询方法

int size()-返回Map中的元素个数
boolean isEmpty()–返回Map中是否包含元素,如不包括任何元素,则返回true
boolean containsKey(Object key)–判断给定的参数是否是Map中的一个关键字key
boolean containsValue(Object val)–判断给定的参数是否是Map中的一个值value
Object get(Object key)–返回Map中与给定关键字相关联的值(value)
Collection values()–返回包含Map中所有值( value)的 Collection对象
Set keySet()-返回包含Map中所有关键字(key)的Set对象
Set entrySet()返回包含Map中所有项的Set对象

Map接口的修改方法

Object put(Object key, Object val)-一将给定的关键字(key)/值( value对加入到Map对象中。其中关键字(key)必须唯一,否则,新n入的值会取代Map对象中已有的值
void putAll(Map m)–将给定的参数Map中的所有项加入到接收者Map对象中
Object remove(Object key)-将关键字为给定参数的项从Map对象中删除
void clear()–从Map对象中删除所有的项

哈希表

也称散列表,用来存储群体对象的集合类结构
常用的类:
HashTable
HashMap
容量:哈希表的容量不是固定的,随着对象的假如,其容量可以自动扩充
关键字/值:每个存储的对象都需要有一个关键字key,key可以是对象本身,也可以是对象的一部分(如对象的某一属性)
哈希码:将关键字key映射到一个整型数据,称为key的哈希码
哈希函数:返回对象的哈希码
项:哈希表中的每一项都有两个域–关键字域及值域,key和value都可以是任意的Object类型的对象,但不能为null,key是唯一的
装填因子:

HashMap的构造方法

HashMap()
默认容量16,默认裝填因子0.75。
HashMap(int initialCapacity)
容量 initialCapacity,默认装填因子0.75。
HashMap(int initialCapacity, float loadFactor)
容量 initialCapacity,装填因子 loadfactor
HashMap(Map<? extends K,? extends V> m)
以参数m为初值构造新的 Hashmap

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值