java里面set集合,Java集合set

1.Set

88e2f49bb49fb84654151c403a82ed33.png

数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。

集合可以存储不同类型的对象。

共性方法

由于大部分集合类都继承了Collection接口,所以Collection接口的方法就是集合类的共性方法.

public static void demo1(){

Collection col1=new ArrayList();

col1.add("java01");

col1.remove("java01");

col1.clear();

System.out.println(col1.size());

System.out.println(col1.isEmpty());

System.out.println(col1.contains("java01"));

}

79f83fa8e550507a7db909029cfc02e3.png

迭代器

//用迭代器取出元素方式2,将迭代器在for循环的第一个;前定义,可以提高性能

for (Iterator it=col1.iterator();it.hasNext();) {

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

}

2.List 与Set

03e85d5386641a06fac9c1b385ad3f64.png

3.HashSet

HashSet:底层数据结构是哈希表。通过Object上的hashCode方法来判断元素是否重复,如果hashCode一样,则进一步通过equals方法判断,如果连equals都一样,则确认是重复元素.如果equals 为false那么HashSet 认为新加入的对象没有重复.新元素可以存入.

b5db162ce4dd181bfbeda7b9a8dc7d13.png

左图:hashCode值不相同的情况

右图:hashCode值相同,但equals不相同的情况。

public static void main(String[] args) {

HashSet set=new HashSet();

set.add(new Person("a1", 12));

System.out.println(set.contains(new Person("a2", 34)));

System.out.println(set.remove(new Person("a2", 34)));

Iterator it=set.iterator();

while (it.hasNext()) {

Person p=(Person)it.next();

System.out.println(p.getName()+"的年龄是"+p.getAge());

}

}

LinkedHashSet:

类HashSet和LinkedHashSet都是接口Set的实现,两者都不能保存重复的数据。主要区别是HashSet不保证集合中元素的顺序,即不能保证迭代的顺序与插入的顺序一致。

而LinkedHashSet按照元素插入的顺序进行迭代,即迭代输出的顺序与插入的顺序保持一致。

LinkedHashSet 通过继承 HashSet,底层使用 LinkedHashMap.

4.TreeSet

TresSet:可以对集合中的元素排序。底层数据结构是二叉树,通过元素的compareTo方法是否返回0保证元素唯一性。

TreeSet则是对Set中的元素进行排序存放【TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序】。

import java.util.Iterator;

import java.util.TreeSet;

class Student implements Comparable{

String name;

int age;

public Student(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public int getAge() {

return age;

}

@Override

public int compareTo(Object o) {

if (!(o instanceof Student)) {

throw new RuntimeException();

}

Student s=(Student)o;

if (this.age>s.getAge()) {

return 1;

}else if (this.age==s.getAge()) {

return this.name.compareTo(s.name);

}

return -1;

}

}

public class TreeSetDemo {

public static void main(String[] args) {

demo2();

}

public static void demo2(){

TreeSet ts=new TreeSet();

ts.add(new Student("lisi01", 56));

ts.add(new Student("lisi02", 34));

ts.add(new Student("lisi03", 34));

ts.add(new Student("lisi04", 12));

Iterator it=ts.iterator();

while(it.hasNext()){

Student s=(Student)it.next();

System.out.println(s.getName()+"的年龄是:"+s.getAge());

}

}

}

注意:存入TreeSet集合中的元素类必须实现Comparable接口,并覆盖compareTo方法。方法抛出异常。compareTo方法的作用是确定对象在集合中的顺序,如果compareTo方法返回1,则放在当前比较元素的后边,否则放前边。

5446ba30c95663f88a743aad33dea138.png

参考:

标签:set,Java,System,col1,println,Student,集合,new,public

来源: https://blog.csdn.net/rosefun96/article/details/100134546

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值