您的位置:首页 > 编程语言 > Java开发

【JavaSE笔记】集合(三)_Set

2017-08-03 20:29 288 查看
本期知识点
Set及其子类

Collation总结

1.Set

a.Set集合的特点:

无序(存储和取出不一致),集合中的元素不可以重复。

import java.util.HashSet;
import java.util.Set;

public class Demo01 {
public static void main(String[] args) {
//创建Set集合对象
//		Set是接口不能直接实例化
//		Set<String> a = new Set<String>();
Set<String> a = new HashSet<String>();
a.add("hello");
a.add("is");
a.add("me");
a.add("is");
a.add("me");
a.add("hello");
//增强for遍历
for (String s : a) {
System.out.println(s);
}
}
}
/*out:
me
is
hello
*/

2.HashSet

a.底层数据结构是哈希表(是一个元素为链表的数组)

b.哈希表底层依赖两个方法:

hashCode()equals()
执行顺序:

首先比较哈希值是否相同?

相同:

继续执行equals()方法:

true:元素重复了,不添加

false:直接把元素添加到集合中

不同:

直接把元素添加到集合中

c.如何保证元素的唯一性?

由hashCode()、equals()保证。

e.HashSet存储字符串并遍历

import java.util.HashSet;

public class HashSet存储字符串并遍历 {
public static void main(String[] args) {
//创建HashSet集合对象;
HashSet<String> a = new HashSet<String>();
a.add("hello");
a.add("is");
a.add("me");
a.add("hello");
a.add("is");
a.add("me");

for (String s : a) {
System.out.println(s);
}
}
}
/*out:
me
is
hello*/


f.HashSet存储自定义对象并遍历

import java.util.HashSet;
class Student{
private String name;
private int age;

public Student() {
super();
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public
c08b
int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
//重写equals方法 比较的是内容
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
public class HashSet存储自定义对象并遍历 {
public static void main(String[] args) {
//创建HashSet集合对象
HashSet<Student> a = new HashSet<Student>();
//添加对象
a.add(new Student("Tom",21));
a.add(new Student("Peter",20));
a.add(new Student("Tom",21));
a.add(new Student("Jack",23));
//遍历
for (Student s : a) {
System.out.println(s.getName()+"---"+s.getAge());
}
}
}
/*out:
Tom---21
Tom---21
Peter---20
Jack---23*/


3.TreeSet

a.底层数据结构是红黑树(自然平衡二叉树)

b.保证元素的排序方式:

i.自然排序(元素具备比较性)

让元素所属的类实现 Comparable 接口

ii.比较器排序(集合具备比较性)

让集合构造方法接收 Comparator的实现类对象

c.如何保证元素的唯一性?

根据比较的返回值是否是0来决定

import java.util.TreeSet;

public class Demo01 {
public static void main(String[] args) {
//创建TreeSet对象
TreeSet<Integer> a = new TreeSet<Integer>();
//给集合添加元素
//3,2,5,8,4,7,6
a.add(3);
a.add(2);
a.add(5);
a.add(8);
a.add(4);
a.add(7);
a.add(6);
//遍历
for (Integer i : a) {
System.out.print(i+" ");
}
}
}
//out:2 3 4 5 6 7 8


4.Collection集合总结:

Collection
|--List 有序,可重复

|--ArrayList

底层数据结构是数组,查询快,增删慢。

线程不安全,效率高

|--Vector

底层数据结构是数组,查询快,增删慢。

线程安全,效率低

|--LinkedList

底层数据结构是链表,查询慢,增删快。

线程不安全,效率高

|--Set 无序,唯一

|--HashSet

底层数据结构是哈希表。

如何保证元素唯一性的呢?

依赖两个方法:hashCode()和equals()

开发中自动生成这两个方法即可

|--LinkedHashSet

底层数据结构是链表和哈希表

由链表保证元素有序

由哈希表保证元素唯一

|--TreeSet

底层数据结构是红黑树。

如何保证元素排序的呢?

自然排序

比较器排序

如何保证元素唯一性的呢?

根据比较的返回值是否是0来决定



5.Collection集合我们到底使用谁呢?

唯一?(不确定?用ArrayList)
是:Set

排序?(不确定,用HashSet)

是:TreeSet

否:HashSet

否:List

安全?(不确定,用ArrayList)

是:Vector

否:

查询多:ArrayList

增删多:LinkedList
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: