集合简述(二)

集合简述(二)


前言

Java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。而数组长度固定,不能满足变化的要求。所以,java提供了集合。

一 容器的继承体系

Collection接口  容器的根层次接口,它表示所有容器类的标准,如何来判断 一个类是否是容器,那么要看它是否实现了Collection接口

List 接口 ---列表

Queue 接口 ---队列  先进先出

Set 接口  ----集合

SortedSet   ----有序集合

二、集合是什么?

 Java集合是java提供的一个工具包,全部继承自java.util.*。主要包括两大接口Collection接口和Map接口以及相关的工具类(Iterator迭代器接口、Enumeration枚举类、Arrays和Colletions)。

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

集合框架体系:

(一)set

Public interface Set <E>

<E>  表示的泛型 -----容器中存放的元素的类型 ---指代的是引用数据类型

基本数据类型不能当作泛型来使用,而是要使用基本数据类型的封装类

表示数学中的集合  交差并补---集

Set的特点

不能存在重复的元素(什么样的元素叫重复?hashcode相同的元素为重复元素)

1.HashSet

HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。

HashSet 的特点

  1. 不能存在重复元素
  2. 底层结构是哈希表(HashTable)
  3. 无序----无索引
  4. 可以存放null元素
  5. 牺牲空间换时间 (桶)----运行速度较快
  6. 扩容和加载因子 需要根据hashMap的原理来决定

HashSet相关重要方法:

addAll() -----并集

containsAll()-----子集

removeAll() -----差集

retainAll() ------交集

实例化代码如下(示例):

HashSet<String> sites = new HashSet<String>();//用于保存字符串元素

 练习:

String score[] s =

{"A,语文,98","B,数学,87","B,英语,56“ "C,语文,66" "G,数学,90"},name[“A“ B C D E F G]

问哪些人没有参加考试:

public static void main(String[] args) {
String[] score={"A,语文,98","B,数学,87","B,英语,56",
				 "C,语文,66","G,数学,90"};
		String[] name={"A","B","C","D","E","F","G"};
		Set<String> scoreSet=new HashSet<String>();
		for (int i = 0; i < score.length; i++) {
			String[] bRet = score[i].split(",");
			scoreSet.add(bRet[0]);
		}
		Set<String> nameSet=new HashSet<String>();
		for (int i = 0; i < name.length; i++) {
			nameSet.add(name[i]);
		}
		nameSet.removeAll(scoreSet);
		System.out.println(nameSet);
	}
}

2.TreeSet

Treeset的特点:

  1. 底层结构是二叉树结构
  2. 二叉树认为能够存放在树形结构中的元素都是有序元素
  3. 不允许存放重复的元素

(二) List

序列----有序列表

  1. 允许存放重复的元素
  2. 有序 ----存储的顺序
  3. 可以在任何位置上插入元素,更利于做元素的查找

1.ArrayList

ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能

ArrayList特点:

  1. 底层结构是动态数组
  2. 线程不同步
  3. 更善于做随机访问-遍历   
  4. 添加元素和删除元素的方法 运行速度要比LinkedList慢

 初始化对象:

ArrayList<E> objectName =new ArrayList<>();  // 初始化

实例:

import java.util.ArrayList;
public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> person = new ArrayList<String>();
        sites.add("张三");
        sites.add("李四");
        sites.add("王二麻");
        System.out.println(person);
    }
}

 2.LinkedList

LinkedList的特点:

  1. 底层结构链表
  2. 有序---有索引
  3. 线程不同步 线程不安全
  4. 实现了Queue 说明 它是个队列 FIFO(先进先出)
  5. 堆栈的实现 队列的实现 以及双端队列的实现
  6. LinkedList 更擅长做添加和修改以及删除等操作 运行速度要比ArrayList快

 实例化对象:

LinkedList<E> list = new LinkedList<E>();   // 普通创建方法
或者
LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表

ArrayList与LinkedList :

Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。

与 ArrayList 相比,LinkedList 的增加和删除对操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

继承的类与接口:

LinkedList 继承了 AbstractSequentialList 类。

LinkedList 实现了 Queue 接口,可作为队列使用。

LinkedList 实现了 List 接口,可进行列表的相关操作。

LinkedList 实现了 Deque 接口,可作为队列使用。

LinkedList 实现了 Cloneable 接口,可实现克隆。

LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。

3.Vector

1. 底层结构动态数组

2. 线程安全 1.2 JDK 版本 默认容量10

3. 不建议使用

Vector 类支持 4 种构造方法。

第一种构造方法创建一个默认的向量,默认大小为 10:

Vector()

第二种构造方法创建指定大小的向量。

Vector(int size)

第三种构造方法创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目。

Vector(int size,int incr)

第四种构造方法创建一个包含集合 c 元素的向量:

Vector(Collection c)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值