set用法

参考文档:http://www.java2s.com/Tutorials/Java/java.util/HashSet/index.htm

(一).Set集合

1.添加到容器中的元素不能重复,就算重复只按一个元素算!

2.Set集合继承Collection接口,方法全部来自Collection接口,自身没有定义其他方法。

3.Set接口主要两个实现类为HashSet、TreeSet。

4.Set集合中的元素不按特定顺序排序。因此我们无法向list一样根据索引获取数据。

(二).HashSet集合的使用

1.存取HashSet集合中的元素,是根据哈希码来存取。HashSet根据哈希码来确定元素在集合中存储的位置(内存地址)。

2.HashSet不能保证迭代顺序,且允许元素为null

3.比较两个HashSet集合是否相同,先比较hasCode()返回的值是否相同,在使用equals()方法比较两个HashSet存储位置是否相同。如果满足以上两个条件,则HashSet集合相同。

4.hasCode()和equals()方法必须一起使用,以保证判断HashSet一致性。

(三)代码演示

1.添加多个相同元素,但容器中只有一个

package com.Collection;

import java.util.HashSet;

public class TestHasSet {

    public static void main(String[] args) {

        HashSet<String> object=new HashSet();

        object.add("中国");

        object.add("中国");

        object.add("中国");

        object.add("中国");

        System.out.println("object"+object);

    }

    }

运行结果

2.清空HashSet中的所有元素

package com.Collection;

import java.util.HashSet;

public class TestHasSet {

    public static void main(String[] args) {

        HashSet<String> object=new HashSet();

        object.add("中国");

        object.add("中国");

        object.add("中国");

        object.add("中国");

        System.out.println("object"+object);

        object.clear();

        System.out.println("清空object后"+object);

    }

}

运行结果

3.删除指定名称的元素

package com.Collection;

import java.util.HashSet;

public class TestHasSet {

    public static void main(String[] args) {

        HashSet<String> object=new HashSet();

        object.add("中国");

        object.add("美国");

        object.add("日本");

        object.add("俄罗斯");

        System.out.println("object"+object);

        object.remove("中国");

        System.out.println("清空object后"+object);

    }

}

运行结果

4.使用迭代器遍历HashSet中的所有元素

package com.Collection;

import java.util.HashSet;

import java.util.Iterator;

public class TestHasSet {

    public static void main(String[] args) {

        HashSet<String> object=new HashSet();

        object.add("中国");

        object.add("美国");

        object.add("日本");

        object.add("俄罗斯");

        Iterator iterator = object.iterator();

          while (iterator.hasNext()){

                System.out.println("遍历HashSet中的所有元素: "+iterator.next()); 

              }

    }

}

运行结果


5.获取HashSet集合中的元素个数

package com.Collection;

import java.util.HashSet;

import java.util.Iterator;

public class TestHasSet {

    public static void main(String[] args) {

        HashSet<String> object=new HashSet();

        object.add("中国");

        object.add("美国");

        object.add("日本");

        object.add("俄罗斯");

        System.out.println("HasHSet总元素为"+object.size());

    }

}

运行结果

(四) TreeSet集合的使用

1.TreeSet接口实现Set和SortedSet接口

2.TreeSet集合中的元素是有顺序的,如果要排序直接使用TreeSet

3.TreeSet的使用和其他集合差不多,

代码演示

1.排序

package com.Collection;

import java.util.TreeSet;

public class TestTreeSet {

    public static void main(String[] args) {

        TreeSet<String> ts=new TreeSet();

        ts.add("张三");

        ts.add("李四");

        ts.add("王五");

        ts.add("宋小宝");

        ts.add("赵本山");

        System.out.println("树集合"+ts);

        System.out.println("树集合的第一个元素"+ts.first());

        System.out.println("树集合最后一个 元素"+ts.last());

        System.out.println("headSet(李四)"+ts.headSet("李四"));

        System.out.println("tailSet(李四)"+ts.tailSet("李四"));

        System.out.println("ceiling(四)"+ts.ceiling("四"));

    }

}

2.遍历TreeSet集合中的元素

package com.Collection;

import java.util.Iterator;

import java.util.TreeSet;

public class TestTreeSet {

    public static void main(String[] args) {

        TreeSet<String> ts=new TreeSet();

        ts.add("张三");

        ts.add("李四");

        ts.add("王五");

        ts.add("宋小宝");

        ts.add("赵本山");

          Iterator<String> iterator = ts.iterator();

          while (iterator.hasNext()){

            System.out.println(iterator.next());

          }

    }

}

例题:欢乐的跳

题目描述

一个n个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了[1,n−1]之间的所有整数,则称之符合“欢乐的跳”,如数组1423符合“欢乐的跳”,因为差的绝对值分别为:3,2,1。

给定一个数组,你的任务是判断该数组是否符合“欢乐的跳”。

输入格式

每组测试数据第一行以一个整数n(1≤n≤1000)开始,接下来n个空格隔开的在[−108,108]之间的整数。

输出格式

对于每组测试数据,输出一行若该数组符合“欢乐的跳”则输出"Jolly",否则输出"Not jolly"。

输入输出样例

输入 #1

4 1 4 2 3

输出 #1

Jolly

输入 #2

5 1 4 2 -1 6

输出 #2

Not jolly

import java.util.HashSet;

import java.util.Scanner;

import java.util.Set;

public class 欢乐的跳 {

public static void main(String[]args) {

        Scanner sc = new Scanner(System.in);

        int num = sc.nextInt();

        Set<Integer> set = new HashSet<>(1000);

       

        int prev = sc.nextInt();

        for (int i = 1; i < num; i++) {

            int temp = sc.nextInt(), abs = Math.abs(prev-temp);

            if (abs >= num || set.contains(abs)) {

                System.out.println("Not jolly");

                return;

            } else {

                prev = temp;

                set.add(abs);//将加减运算之后的数据放到set里面

            }

        }

         

        System.out.println("Jolly");

         

    }

}

关于这道题,后来又看到一位博主的做法,觉得不太理解,就先保存下来

import java.util.Arrays;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

int n=sc.nextInt();

int[] arr=new int[n];

int a=sc.nextInt();

for(int i=1;i<=n-1;i++) {

int b=sc.nextInt();

arr[i]=Math.abs(a-b);

a=b;

}

Arrays.sort(arr);

for(int i=1;i<=n-1;i++) {

if(arr[i]!=i) {

System.out.println("Not jolly");

return;

}

}

System.out.println("Jolly");

}

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容