263/264Vector集合和Hashset集合介绍
Vector集合
这个集合是java最早的一个集合,它的底层是一个数组。
Vector是线程安全的,但扩容会增长100%
ArrayList是线程不安全的,但扩容增长50%,能有效利用磁盘空间。
特点:
有序的,可以存储重复值和null值。
底层是数组实现的,线程安全。结构与ArrayList非常相似,同样是一个线性的动态可扩容数组。
初始容量是10,没有设置扩容增量的情况下以自身的2倍容量扩容,可以设置容量增量,初始容量和扩容量可以通过构造函数public Vector(int initialCapacity, int capacityIncrement)进行初始化
构造方法
/**
* 无参构造,创建一个空的vector,指定内部的数组的大小是10,并且增量是0
*/
public Vector() {
this(10);
}
/**
* 指定初始容量,initialCapacity是默认容量大小。增量为0时每次扩容数组容量会增加一倍。
*/
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
/**
* 指定初始容量和增量,初始容量如果是负的话抛出异常
*/
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
/**
* 创建一个包含指定集合内容元素的vector,vector中的元素按照集合的遍历顺序存储
*/
public Vector(Collection<? extends E> c) {
Object[] a = c.toArray();
elementCount = a.length;
if (c.getClass() == ArrayList.class) {
elementData = a;
} else {
elementData = Arrays.copyOf(a, elementCount, Object[].class);
}
}
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
Hashset集合介绍
java.util. Hashset是set接口的一个实现类
它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。
java.util. Hashset底层的实现其实是一个java.util. Hashmap支持,
Hashset是根据对象的哈希值来确定元素在集合中的存储位置,
因此具有良好的存取和查找性能。
保证元素唯性的方式依赖于: hashcode与 equals方法。
HashSet集合相较于List集合而言它的不同点在于它是无序的,且有唯一性。
实现set接口,由哈希表(实际上是一个HaMp实例)支持。它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。
特点
- 存放单列元素,无序而且不重复。
- 线程不安全,效率高。
- 集合元素可以为null。
- 没有下标,不可以通过索引获取到集合元素。
HashSet集合继承了AbstractSet类,实现了Set接口。其框架图如下:
举例:
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
//使用add 方法忘向集合中添加元素
set.add(1);
set.add(2);
set.add(3);
set.add(4);
set.add(5);
//使用迭代器遍历sat集合
Iterator<Integer> it =set.iterator();
while (it.hasNext()){
Integer n = it.next();
System.out.println(n);//1 2 3
}
//使用增强班fro循环遍历set集合
System.out.println("------");
for (Integer i :
set) {
System.out.println(i);
}
}
}
//自定义类(此时没有重写hashCode与equals方法): public class Student { private String sno; private String sname; private boolean male; get,set,有无参构造和toString方法//Test ublic class Set_stu { public static void main(String[] args) { Set<Student> set = new HashSet<>(); set.add(new Student()); set.add(new Student()); set.add(new Student("1005", "John", true)); set.add(new Student("1005", "John", true)); System.out.println(set); } }
结果:
因为HashSet集合没有索引,所以无法通过普通for循环进行遍历。
通过增强for循环遍历HashSet集合。代码如下:
public static void main(String[] args) { HashSet<Integer> hs = new HashSet(); hs.add(33); hs.add(22); hs.add(11); hs.add(10); for (Integer x: hs) { System.out.println(x); } }
public static void main(String[] args) { HashSet<Object> set = new HashSet<>(); set.add("乐迪");//集合中添加元素 set.add("卢本伟");//集合中添加元素 set.add("梁志超");//集合中添加元素 System.out.println("该集合的长度" + set.size()); set.add("a");//集合中添加元素 set.add("b");//集合中添加元素 set.add("c");//集合中添加元素 set.add("d");//集合中添加元素 for (Object object ://因为HashSet集合是无序的所以不能用普通for循环需要用到foreach循环 set) { System.out.print(object+"\t"); } set.remove("a");//删除集合中的元素 if (set.isEmpty()){ System.out.println("该集合中不存在元素"); }else { System.out.println("\n该集合中存在元素"); Iterator<Object> iterator = set.iterator();//通过迭代器获取所有值 while (iterator.hasNext()){ System.out.print(iterator.next()+"\t"); } set.clear();//清空元素 System.out.println("\n清空之后"); if (set.isEmpty()){ System.out.print("该集合不存在元素"); }}}}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix