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("该集合不存在元素");
           }}}}
复制代码

 

posted @   ja不会va  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示