java中set的特点_java -- Set 用法及特点

Hashset 和 ListHashSet用法及特点

// HashSet 和 LinkedHashSet 用法及特点

/**

* 编写一个ArrayList集合 用Set去重

* 为了保证顺序 我们用LinkedHashSet

*/

public static void fun6() {

ArrayList aList = new ArrayList<>();

aList.add("b");

aList.add("a");

aList.add("a");

aList.add("b");

aList.add("c");

aList.add("c");

LinkedHashSet 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 hSet = new HashSet<>();

for (int i = 0; i < charArray.length; i++) {

hSet.add(charArray[i]);

}

System.out.println(hSet);

}

/**

* 编写一个 随机/不重复的 10个数的程序

* Set集合实现不重复

*/

public static void fun4() {

HashSet 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的去重的特点

*/

public static void fun3() {

LinkedHashSet 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 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 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 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 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 tSet = new TreeSet<>(new Compara2());

for (int i = 0; i < charArray.length; i++) {

tSet.add(charArray[i]);

}

System.out.println(tSet);

}

/**

* ArrayList存储无序并且重复的字符串, 要求排序 并且不能去除重复

*/

public static void fun10() {

ArrayList 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 tSet = new TreeSet<>(new compara1());

tSet.addAll(aList);

aList.clear();

aList.addAll(tSet);

System.out.println(aList);

}

/**

* 使用比较器 比较排序集合中的元素. 要求保留重复

* 重写比较器comparator接口 实现自己想要的比较方法

* 注意:要记着将comparator的实现类要创建在 集合中

*/

public static void fun9() {

TreeSet 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 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 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)方法添加已经存在的对象,则会覆盖前面的对象

为什么要使用集合类

当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值