ConcurrentHashMap相关
·📄 3305 字·🍵 7 分钟
JDK1.7中的ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成,即ConcurrentHashMap 把哈希桶切分成小数组(Segment ),每个小数组有 n 个 HashEntry 组成。
点击查看笔记列表
Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系。
线程安全的:
线性不安全的:
第一种,实体类实现Comparable接口,并实现 compareTo(T t) 方法,称为内部比较器。
import java.util.TreeSet;
public class Compare {
public static void main(String[] args) {
TreeSet<Student> students=new TreeSet<>();
students.add(new Student(3,"C"));
students.add(new Student(2,"B"));
students.add(new Student(1,"A"));
students.forEach(System.out::println);
}
}
class Student implements Comparable<Student>{
int age;
String name;
public Student(int age,String name){
this.age=age;
this.name=name;
}
@Override
public int compareTo(Student o) {
//标准升序排序:大于 1 小于 -1 等于 0
return (Integer.compare(this.age, o.age));
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
第二种,创建一个外部比较器,这个外部比较器要实现Comparator接口的 compare(T t1, T t2)方法。
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.TreeSet;
public class Compare {
public static void main(String[] args) {
//升序
TreeSet<Student> students=new TreeSet<>(Comparator.comparingInt(o -> o.age));
students.add(new Student(3,"C"));
students.add(new Student(2,"B"));
students.add(new Student(1,"A"));
students.forEach(System.out::println);
}
}
class Student{
int age;
String name;
public Student(int age,String name){
this.age=age;
this.name=name;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
使用ListIterator,只能遍历List实现的对象,但可以向前和向后遍历集合中的元素。
public static void main(String[] args) {
// 创建集合
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
// 获取迭代器
Iterator<String> it = sites.iterator();
ListIterator<String> its=sites.listIterator();
// 输出集合中的所有元素
while(it.hasNext()) {
System.out.println(it.next());
}
}
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext(); //检查是否有下一个元素
E next(); //返回下一个元素
boolean hasPrevious(); //check是否有previous(前一个)element(元素)
E previous(); //返回previous element
int nextIndex(); //返回下一element的Index
int previousIndex(); //返回当前元素的Index
void remove(); //移除一个elment
void set(E e); //set()方法替换访问过的最后一个元素 注意用set设置的是List列表的原始值
void add(E e); //添加一个element
}
public interface Iterator<E> {
boolean hasNext(); //检查是否有下一个元素
E next(); //返回下一个元素
}
快速失败(fail—fast)
安全失败(fail—safe)