A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 专注的一批 中级黑马   /  2019-10-25 11:40  /  1232 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set集合的常用方法:
初始化方法:Set<String> testSet = new HashSet<String>();
testSet.add("Java");
Set<String> testSet = new HashSet<String>(){{
            add("morning");
            add("afternoon");
}}
其他常用方法:add(E e):如果Set集合中不存在指定元素,则增加此元素。addAll(collection c):如果Set集合中没有指定collection中的所有元素,则增加。clear():移除Set中的所有元素。contains(object o):如果Set集合中包含指定元素,则返回truecontainsAll(collection c):如果Set集合中包含collection中的所有元素,返回trueequals(object o):判断指定对象与此Set集合是否相等。hashCode():返回此Set的哈希码值。isEmpty():判断Set集合是否为空,为空返回trueiterator():返回在此Set的元素上进行迭代的迭代器。remove(object o):移除Set集合中的指定元素。removeAll(collection c):移除Set中包含在collection中的元素。retainAll(collection c):仅保留Set中包含在collection中的元素。size():返回Set集合中的元素的个数。
toArray():返回一个包含Set中所有元素的数组。
Set集合与List集合的区别就是,Set集合的元素不能重复,List集合的元素是可以重复的。
//  HashSet LinkedHashSet 用法及特点
/**
* 编写一个ArrayList集合 用Set去重
* 为了保证顺序  我们用LinkedHashSet
*/
public static void fun6() {
    ArrayList<String> aList = new ArrayList<>();
    aList.add("b");
    aList.add("a");
    aList.add("a");
    aList.add("b");
    aList.add("c");
    aList.add("c");
    LinkedHashSet<String> hSet = new LinkedHashSet<>();
    hSet.addAll(aList);
    aList.clear();
    aList.addAll(hSet);
    System.out.println(aList);
}/**
* 编写一个 从键盘键入一连串字符串,将重复的字符串去掉,打印出不通过的字符
*/
public static void fun5() {
    System.out.println("请输入一连串字符: ");
    Scanner scanner = new Scanner(System.in);
    String s1 = scanner.nextLine();
    char[] charArray = s1.toCharArray();
    HashSet<Character> hSet = new HashSet<>();
    for (int i = 0; i < charArray.length; i++) {
        hSet.add(charArray);
    }
    System.out.println(hSet);
}/**
* 编写一个 随机/不重复的 10个数的程序
* Set集合实现不重复
*/
public static void fun4() {
    HashSet<Integer> hSet = new HashSet<>();
    while (hSet.size() < 10) {
        int i1 = (int)(Math.random() * (20 - 1 + 1) - 1);
        hSet.add(i1);
    }
    System.out.println(hSet);
}/**
* LinkedHashSet 特点: 有序的(怎么存的可以怎么取出来)
* 底层实现是链表实现
* 同样具有Set的去重的特点
*/
Setclear()方法
set是一个无序集合,方法很多,set只允许添加同一类型的数据,这个在使用add(),addAll()的时候只需要注意集合是否已经有值,即将加入的值是否跟当前里面的值是否是同一外汇返佣http://www.kaifx.cn/类型即可,此问题比较简单,今天我们说一下clear()方法;使用时一定要注意:它会将连同里面的对象的值一起清除;`
通过测试我们发现,使用clear()之前我们map中的值一直存在;使用之后,不仅清除了set中的数据,我们map中的数据一起被清除;但是map对象依然存在,我们可以重新加入新类型的数据;
测试代码
public static void main(String[] args) {
        Map map = new HashMap();
        //加入int数据
        map.put("a", 1);
        map.put("b", 2);
        map.put("c", 3);        Set set = map.keySet();
        System.out.println(set);        set = map.entrySet();
        System.out.println("map---" + map);
        System.out.println("set---" + set);        //使用clear
        set.clear();
        System.out.println("map---" + map);
        System.out.println("set---"+set);        //加入新类型(字符串)的数据
        map.put("a", "测试");
        map.put("b", "测试结束");
        System.out.println("map---重新加入" + map);
    }
测试结果
[a, b, c]
map---{a=1, b=2, c=3}
set---[a=1, b=2, c=3]
map---{}
set---[]
map---重新加入{a=测试, b=测试结束}
public static void fun3() {
    LinkedHashSet<String> lSet = new LinkedHashSet<>();
    lSet.add("c");
    lSet.add("a");
    lSet.add("a");
    lSet.add("c");
    lSet.add("b");
    lSet.add("b");
    lSet.add("d");
    lSet.add("d");
    for (String string : lSet) {
        System.out.println(string);
    }
}/**
* 去除对象 --- 需要重写HashCode() equals()
*/public static void fun2() {
    HashSet<Person> hSet = new HashSet<>();
    hSet.add(new Person("科比" , 18));
    hSet.add(new Person("加索尔" , 19));
    hSet.add(new Person("费舍尔" , 20));
    hSet.add(new Person("拜纳姆" , 21));
    hSet.add(new Person("奥多姆" , 22));
    hSet.add(new Person("奥多姆" , 22));
    hSet.add(new Person("科比" , 18));
    hSet.add(new Person("加索尔" , 19));
    hSet.add(new Person("费舍尔" , 20));
    hSet.add(new Person("拜纳姆" , 21));
    for (Person personCopy : hSet) {
        System.out.println(personCopy);
    }
}/**
* Set接口特点: 无下标 无顺序 **无重复**
*/
public static void fun1() {
    HashSet<String> hSet = new HashSet<>();
    hSet.add("c");
    hSet.add("a");
    hSet.add("a");
    hSet.add("c");
    hSet.add("b");
    hSet.add("b");
    hSet.add("d");
    hSet.add("d");    for (String string : hSet) {
        System.out.println(string);
    }
}
TreeSet用法及特点//  计数器
/**
* 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)
* 按照总分从高到低输出到控制台。
*/
public static void fun13() {
    System.out.println("请输入姓名及成绩:");
    Scanner scanner = new Scanner(System.in);
    TreeSet<Clases1> tSet = new TreeSet<>();
    while(tSet.size() < 5) {
        String s1 = scanner.nextLine();
        String[] split = s1.split(",");
        int parseInt = Integer.parseInt(split[1]);
        int parseInt2 = Integer.parseInt(split[2]);
        int parseInt3 = Integer.parseInt(split[3]);
        int num = parseInt + parseInt2 + parseInt3;
        tSet.add(new Clases1(split[0], parseInt, parseInt2, parseInt3, num));    }
    System.out.print(tSet);
}/**
* 程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入.
* 把所有输入的整数倒序排列打印.
*/
public static void fun12() {
    System.out.println("请输入一个字符串");
    Scanner scanner = new Scanner(System.in);
    TreeSet<Integer> tSet = new TreeSet<>(new Compara3());
    while(true) {
        String s1 = scanner.nextLine();
        if (s1.equals("quit")) {
            break;
        }
        int parseInt = Integer.parseInt(s1);
        tSet.add(parseInt);
    }
    System.out.println(tSet);
}/**
* 键盘接受一个字符串  程序对其中所有字符进行排序
*/
public static void fun11() {
    System.out.println("请输入一串字符串: ");
    Scanner scanner = new Scanner(System.in);
    String s1 = scanner.nextLine();
    char[] charArray = s1.toCharArray();
    TreeSet<Character> tSet = new TreeSet<>(new Compara2());
    for (int i = 0; i < charArray.length; i++) {
        tSet.add(charArray);
    }
    System.out.println(tSet);
}/**
* ArrayList存储无序并且重复的字符串, 要求排序  并且不能去除重复
*/
public static void fun10() {
    ArrayList<String> aList = new ArrayList<>();
    aList.add("aaa");
    aList.add("asd");
    aList.add("ww");
    aList.add("zz");
    aList.add("CC");
    aList.add("a");
    aList.add("bcd");
    aList.add("aaa");
    TreeSet<String> tSet = new TreeSet<>(new compara1());
    tSet.addAll(aList);
    aList.clear();
    aList.addAll(tSet);
    System.out.println(aList);
}/**
* 使用比较器 比较排序集合中的元素. 要求保留重复
* 重写比较器comparator<T>接口 实现自己想要的比较方法
* 注意:要记着将comparator的实现类要创建在 集合中
*/
public static void fun9() {
    TreeSet<String> tSet = new TreeSet<>(new compara1());
    tSet.add("aaa");
    tSet.add("asd");
    tSet.add("ww");
    tSet.add("zz");
    tSet.add("CC");
    tSet.add("a");
    tSet.add("bcd");
    tSet.add("aaa");
    System.out.println(tSet);
}/**
* TreeSet存储类对象,进行排序 要在创建对象的类中重写compareTo方法
* TreeSet存储的是类对象, 就要看compareTo的返回值
* 返回0  只是一个值
* 返回正数  按存进顺序 正序
* 返回负数  按存进顺序 倒序
*
* TreeSet 内部使用 二叉树来存储的
*  核心:
*      比我小的数存在左边(返回负数时)
*      比我大的数存在右边(返回正数时)
*      不存储,  两个数相等(返回0)
*
*/
public static void fun8() {
    TreeSet<Man> tSet = new TreeSet<>();
    tSet.add(new Man("科比", 19));
    tSet.add(new Man("乔丹", 20));
    tSet.add(new Man("库里", 21));
    tSet.add(new Man("格林", 18));
    tSet.add(new Man("书豪", 19));
    tSet.add(new Man("书豪", 200));
    System.out.println(tSet);
}/**
* TreeSet的特点: **排序**(去重)
*/
public static void fun7() {
    TreeSet<Integer> tSet = new TreeSet<>();
    tSet.add(5);
    tSet.add(4);
    tSet.add(1);
    tSet.add(2);
    tSet.add(3);
    tSet.add(5);
    tSet.add(5);
    for (Integer integer : tSet) {
        System.out.println(integer);
    }
}
总结:
Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象
为什么要使用集合类
当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马