Set集合\HashSet类\TreeSet类\EnumSet类\List集合

Set集合:
Set集合不允许包含相同的元素,如果试图将两个相同的元素加入同一个Set集合中,则天剑操作将失败,add()方法返回false。
Set集合有HashSet、TreeSet、 EnumSet三个实现类。
——————————————————————

HashSet类:
HashSet是Set接口的典型实现。HashSet按Hash算法来存储集合中的元素,因此具有良好的存取和查找性能。
HashSet具有以下特点:
(1)不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也可能发生变化
(2)HashSet不是同步的,如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步。
(3)集合元素值可以是null

当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode()值,然后根据hashCode值决定该对象在HashSet中的存储位置,如果有两个元素通过equal()方法比较返回true,但他们的hashCode值不相等,HashSet会将他们存储在不同的位置。

也就是说,HashSet集合判断两个元素相等的标准是两个对象通过equal()方法比较相等,并且两个对象的hashCode()方法返回值也相等。
——————————————————————————————————————

TreeSet类:
TreeSet是SortedSet的实现类,TreeSet可以确保集合元素处于排序状态。与HashSet集合相比,TreeSet新增了几个方法:

import java.util.TreeSet;

public class TreeSetTest

{
    public static void main(String[] args)
    {
        TreeSet nums = new TreeSet();
        //向TreeSet中添加四个Integer对象
        nums.add(5);
        nums.add(12);
        nums.add(44);
        nums.add(8);
        //输出集合元素,看到集合元素已经处于排序状态
        System.out.println(nums);
        //输出集合第一个元素
        System.out.println(nums.first());
        //输出集合最后一个元素
        System.out.println(nums.last());
        //返回小于的子集,不包含20
        System.out.println(nums.headSet(20));
        //返回大于5的子集,如果Set中包含5,则子集中还包含5
        System.out.println(nums.tailSet(5));
        //返回大于3,小于20的子集
        System.out.println(nums.subSet(3,20));

    }
}

EnumSet类:
(1)EnumSet类是一个专门为枚举类设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式的指定。
(2)EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺序来决定集合元素的顺序。
(3)EnumSet在内部以位向量的形式存储,这种存储形式非常紧凑,高效,因此EnumSet对象占用内存很小,而且运行效率很好,尤其在执行批量操作时。
(4)EnumSet集合不允许加入null元素,如果试图插入null元素,将抛出NullPointerException异常。
(5)EnumSet类没有暴露任何构造器来创建该类的实例,程序应该通过它提供的类方法来创建EnumSet对象。请见javaAPI


下面程序示范了如何使用EnumSet来保存枚举类的多个枚举值:

import java.util.EnumSet;

enum Season
{
    SPRING,SUMMER,FALL,WINTER;

}
public class EnumSetTest
{
    public static void main(String[] args)
    {
        //创建一个EnumSet集合,集合元素就是Season枚举类的全部枚举值
        EnumSet  es1 =EnumSet.allOf(Season.class);

        System.out.println(es1);//输出[SPRING,SUMMER,FALL,WINTER]
        //创建一个EnumSet空集合,指定集合元素是Season类的枚举值
        EnumSet es2 = EnumSet.noneOf(Season.class);
        System.out.println(es2);//输出[]
        //手动添加两个元素
        es2.add(Season.WINTER);
        es2.add(Season.FALL);
        System.out.println(es2);//输出[WINTER,FALL]
        //以指定枚举值创建EnumSet集合
        EnumSet  es3 = EnumSet.of(Season.WINTER,Season.FALL);
        System.out.println(es3);//输出[WINTER,FALL]


    }
}

List集合:
List代表一个元素有序、可重复的集合,集合中的每个元素有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。
List集合默认按元素的添加顺序设置元素的索引。
List集合的方法详见API

import java.util.ArrayList;
import java.util.List;

public class ListTest

{
    public static void main(String[] args)
    {
         List  books = new ArrayList();
         //向books集合里添加3个元素
         books.add("水浒传");
         books.add("西游记");
         books.add("三国演义");
         System.out.println(books);
         //将新字符串插入在第二个位置
         books.add(1,new String("红楼梦"));
         for(int i=0;i<books.size();i++)
        {
         System.out.println(books.get(i));
         }

         //删除第三个元素
         books.remove(2);
         System.out.println(books);

         //判断指定元素在集合中的位置,输出1,表明位于第二位
         System.out.println(books.indexOf(new String("西游记")));
         //将第二个元素替换成新的字符串对象
         books.set(1,new String("围城"));
         System.out.println(books);

    }
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值