1.Set
1.1 Set集合的特点和概述
1.2 哈希值
1.3 HashSet的集合概述和特点
遍历:只能用迭代器和增强for循环遍历
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<String> hashSet = new HashSet<String>();
hashSet.add("hello");
hashSet.add("java");
hashSet.add("world");
hashSet.add("java");
for(String s : hashSet){
System.out.println(s);
}
}
}
输出结果:
java
world
hello
1.4 HashSet 集合保证元素唯一性源码分析
代码如下:
public class Student {
public String name;
public int age;
public String getName() {
return name;
}
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + age;
return result;
}
}
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<Student> hashSet = new HashSet<Student>();
Student s1 = new Student("leon",20);
Student s2 = new Student("leon",20);
hashSet.add(s1);
hashSet.add(s2);
for(Student s : hashSet){
System.out.println(s);
}
}
}
输出结果:
Student{name='leon', age=20}
1.6 LinkedHashSet 的集合概述和特点
1.7 TreeSet 的集合概述和特点
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(10);
treeSet.add(30);
treeSet.add(6);
treeSet.add(30);
for(Integer i:treeSet){
System.out.println(i);
}
}
}
输出结果:
6
10
30
1.8 自然排序Comparable的使用
public class Student implements Comparable<Student> {
public String name;
public int age;
public String getName() {
return name;
}
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student s) {
int num = this.age - s.age;
int mum2 = num==0?this.name.compareTo(s.name):num;
return mum2;
}
}
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<>();
Student s1 = new Student("alisa",30);
Student s2 = new Student("tom",20);
Student s3 = new Student("leon",30);
treeSet.add(s1);
treeSet.add(s2);
treeSet.add(s3);
for(Student s :treeSet){
System.out.println(s.getName()+","+s.getAge());
}
}
}
输出结果:
tom,20
alisa,30
leon,30
1.9 比较器排序Comparator的使用
public class Student {
public String name;
public int age;
public String getName() {
return name;
}
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int num = o1.getAge()-o2.getAge();
int num2 = num==0?o1.getName().compareTo(o2.getName()):num;
return num2;
}
});
Student s1 = new Student("alisa",30);
Student s2 = new Student("tom",20);
Student s3 = new Student("leon",30);
Student s4 = new Student("leon",30);
treeSet.add(s1);
treeSet.add(s2);
treeSet.add(s3);
treeSet.add(s4);
for(Student s :treeSet){
System.out.println(s.getName()+","+s.getAge());
}
}
}
输出结果:
tom,20
alisa,30
leon,30
import java.util.HashSet;
import java.util.Set;
public class TreeSetDemo {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
while(set.size() < 10){
int num = (int)((Math.random())*20+1);
set.add(num);
}
System.out.println(set);
}
}
输出结果:
[17, 3, 19, 5, 7, 11, 12, 13, 14, 15]
2.泛型
2.1 泛型类
2.3 泛型方法
2.4 泛型接口
2.5 类型通配符
2.6 可变参数
public class ArgsDemo {
public static void main(String[] args) {
System.out.println(num(20,40,10));
}
public static int num(int...a){
int sum=0;
for(int i :a){
sum+=i;
}
return sum;
}
}
输出结果:
70
2.7 可变参数的使用