Java知识点详解——第十章:集合

集合

        集合是一组可变数量的数据项(也可能是0个)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。一般来讲,这些数据项的类型是相同的,或基类相同。

Java中的集合结构:
在这里插入图片描述

一:Collection

        层次结构的集合接口,用于描述一组对象。

(Ⅰ):有序集合 List

List集合的特点:

  • 线性存储数据;
  • 允许写入重复的数据。

List集合的常用方法:

方法说明示例
add添加元素arrayList.add(“Chiang”);
isEmpty判断集合中是否有元素arrayList.isEmpty()
size获取集合中元素的数量arrayList.size();
remove移除元素arrayList.remove(0);
indexOf获取元素在集合中的索引arrayList.indexOf(“Chiang”)
set根据索引位置修改元素值arrayList.set(0, “TionsChiang”);
contains判断集合中是否包含某个元素arrayList.contains(“Chiang”)
get获取指定索引的元素arrayList.get(0)
clear清空元素arrayList.clear();

遍历集合的方式:

//方式一
		for(int i = 0; i < arrayList.size(); i++){
			System.out.println(arrayList.get(i));
		}

//方式二 使用迭代器迭代集合中的每个元素
		//获取迭代器
		Iterator iter = arrayList.iterator();
		while(iter.hasNext()){
			//得到每个元素
			Object value = iter.next();
			System.out.println(value);
		}

//方式三 快速迭代,在迭代过程中不允许对集合进行增删改操作
		//快速迭代语法  for(元素类型  元素名  : 被遍历的集合或数组名){}
		//快速的特点:以只读只进的方式访问元素
		for(Object value : arrayList){
			System.out.println(value);
		}	
1.ArrayList(动态数组)

        ArrayList集合实现List接口,List接口的特点是存储的元素是有序,并且可以写入重复的元素。
        ArrayList在执行查询时由于直接通过数组索引访问,因此有着极高的性能,但在执行增删的时候性能较差。

创建ArrayList的方式:

ArrayList arrayList = new ArrayList();

基于多态性父接口可以接受集合的实例对象:

List list = arrayList;
Collection coll = arrayList;

泛型:
        泛型是程序语言的特性,JDK1.5引入,用于限定集合中写入元素的类型,增强程序数据类型安全及减少类型转换的次数,并且只能写入引用类型。

ArrayList<Integer> intList = new ArrayList<>();
2.LinkedList(双向链表结构集合)
  • 实现了List接口;
  • 链表数据结构,通过指针形成物理上的同块数据;
  • 链表结构在执行增删改的时候有着优异的性能,但是在执行查询性能较差。

创建LinkedList的方式:

LinkedList<String> list = new LinkedList<>();
3.Stack(栈)
  • 栈结构集合;
  • 元素先进后出。

创建Stack的方式:

Stack<String> stack = new Stack<>();

弹栈,获取栈顶的元素:

String value = stack.pop();
4.Vector(向量)
  • 动态数组;
  • 作用和ArrayList相同;
  • Vector是线程安全的,ArrayList是非线程安全的。

创建Vector的方式:

Vector<String> vector = new Vector<>();
(Ⅱ):无序集合 Set

Set集合特点:

  • 无序存储;
  • 不能存储重复的元素。
1.HashSet(哈希集合)

创建HashSet的方式:

HashSet<String> set = new HashSet<>();

HashSet添加元素的原理机制:

HashSet中所有存储的元素都将存储在map中;
set.add(元素)执行后, 元素将作为键添加至map中;
set.add方法将通过map.put方法执行;
map.put键的原则是: 如果要添加元素的hash值和已有的键相同 并且 要添加元素和已有的键是同一个对象 或者 要添加的元素使用equals方法与键比较相同;
如果同时满足这两个条件则表示元素值已经存在;
判定重复数据的标准:hash值相同并且equals比较也相同。

2.TreeSet(树集合)
  • 能够自定义序列规则;
  • TreeSet添加元素对象必须要implements Comparabl接口。

创建TreeSet的方式:

TreeSet<String> set = new TreeSet<>();

二:Map

        键值结构的集合接口,可以通过键值获取。

  • Map接口
  • 以键值对的方式存储数据
  • 通过键获取值
  • 键不能重复
  • 值允许重复

        Map集合的本质即Set<Entry>类型的集合,Map集合还将写入了Node[] 数组中(单向链表结构),并提供了相应的方法方法。

Map集合的常用方法:

方法说明示例
put添加键值对map.put(1001, “Chiang”);
get根据键获取值map.get(1001)
size集合中的元素数量map.size()
keySet获取所有的键map.keySet()
values获取所有的值map.values()
entrySet获取所有的键值对map.entrySet()
HashMap

键值结构,根据键获得值

HashMap<K,V> map = new HashMap<>();

遍历Map中元素的方式:

		//Map中的每个元素的类型是Entry类型,一个Entry对象记录了一个键值对
		for(Entry<Integer, String> element : map.entrySet()){
			//通过entry对象获取键值对
			System.out.println(element.getKey()+"\t"+element.getValue());
		}
HashTable

HashTable和HashMap功能相同
区别点: HashTable线程安全,HashMap非线程安全

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值