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集合中包含指定元素,则返回true。containsAll(collection c):如果Set集合中包含collection中的所有元素,返回true。equals(object o):判断指定对象与此Set集合是否相等。hashCode():返回此Set的哈希码值。isEmpty():判断Set集合是否为空,为空返回true。iterator():返回在此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的去重的特点 */ Set的clear()方法 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)方法添加已经存在的对象,则会覆盖前面的对象 为什么要使用集合类 当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。
|