我们可以看到最上面一层是Iterator,Collection,Map(键值对的形式,key,value)
Collection下一层是List,Set,Queue
接下来我们依次介绍:
Vector
1.同步访问,多线程访问的时候是安全的(我们需要区别list在多线程访问是不安全的)
举个栗子:
- 高中众人狂奔去食堂:多线程,不安全
- 在食堂每个人排队打饭:多线程,安全
-
list 户外视野开阔,效率第一
-
vector 食堂空间狭小,安全第一
2.包含许多传统方法,不属于集合框架
源码设置:默认值:10
默认值的大小可以更改 根据容量的大小可以增减数量
package Practice;
import java.util.Vector;
/**
* @Author:Allen
* @Date:3/17/2021 8:40 PM
*/
public class Demo1 {
public static void main(String[] args) {
Vector vector = new Vector(3,2);
//创建指定的大小的向量,增量用incr指
System.out.println("init size "+vector.size());
System.out.println("init capacity "+vector.capacity());
vector.add(1);
vector.add(2);
vector.add(3);
vector.add(4);
System.out.println("insert 4 numbers "+vector.capacity());
System.out.println(vector.firstElement());
System.out.println(vector.contains(3));
for (Object s:
vector) {
System.out.println(s);
}
}
}
Set
Set集合的底层是Linkedlist
我们接下就是用TreeSet去实现数据的存储和读取
在代码中我们可以仔细体会Comparable,Comparator方法的不同
- Comparable:我们需要改写compareTo方法,优点:结构清晰
- Comparator:这里面重写Comparator接口,即compare方法,优点:实现方便
ps:在改写compare to或者compare方法的时候,需注意返回的事 比较符号后面的那个值,14>13 正确,返回顺序是13 14。
import java.util.*;
/**
* 4、分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样,那在
* 成绩排序的基础上按照年龄由小到大排序。
* Comparable需要改写源码,而Comparator无需更改操作,建议直接在Treeset后编写comparator方法
* 用collections编写显示的错误是:require : list 但是返回的是TreeSet
*
* @Author:Allen
* @Date:3/17/2021 4:58 PM
*/
public class Demo6 {
public static void main(String[] args) {
TreeSet<Student> objects = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
if (o1.getScore()<o2.getScore())
return 1;
else if(o1.getScore()==o1.getScore()){
if (o1.getAge()>o1.getAge())
return 1;
}
return -1;
}
});
Student s1 = new Student("贾宝玉",14,88.5);
Student s2 = new Student("林黛玉",13,90.5);
Student s3 = new Student("史湘云",13,85);
Student s4 = new Student("薛宝钗",15,91);
Student s5 = new Student("Allen",12,85);
objects.add(s1);
objects.add(s2);
objects.add(s3);
objects.add(s4);
objects.add(s5);
// Collections.sort(objects, new Comparator<Student>() {
// @Override
// public int compare(Student o1, Student o2) {
// if (o1.getScore()<o2.getScore())
// return 1;
// else if(o1.getScore()==o1.getScore()){
// if (o1.getAge()>o1.getAge())
// return 1;
// }
// return -1;
// }
// });
for (Student s:
objects) {
System.out.println(s);
}
}
}
//implements Comparable<Student>
class Student {
private String name;
private int age;
private double score;
//此处我们改写了compareTo方法,这里和上文的comparator方法重复,保留其中之一就好
@Override
public int compareTo(Student o) {
//this 和 o 进行比较 返回的数据:负数/0/正数
if(this.score<o.score){
return 1;
}else if(this.score==o.score){
if (this.age>o.age) {
return 1;
}
}
return -1;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Double.compare(student.score, score) == 0 && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age, score);
}
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
}
Map整理
Map通常时键值对的形式,我们常见的Map方法有:
import java.util.HashMap;
import java.util.Map;
/**
* @Author:Allen
* @Date:3/19/2021 9:01 PM
*/
public class Demo1 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("Allen",23);
map.put("Robin",45);
map.put("Wu",48);
System.out.println(map);
map.remove(23);
System.out.println(map.size());
if(!map.containsKey(23)){
System.out.println("Allen的信息已经被删除");
}
}
}
结果显示
与你全力成长,同时水平有限,欢迎指正。