package aaa04180; import java.util.TreeSet; public class Test { public static void main(String[] args) { TreeSet treeSet = new TreeSet(); treeSet.add(new Student(45,"张三")); treeSet.add(new Student(150,"李四")); treeSet.add(new Student(455,"王五")); } } class Student{ private int age; private String name; @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + '}'; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Student(int age, String name) { this.age = age; this.name = name; } }
------------------------------------------------------------------------------------------
package aaa04180;
import java.util.TreeSet;
public class Test00 {
public static void main(String[] args) {
TreeSet treeSet = new TreeSet();
treeSet.add(new Student(14,"张三"));
treeSet.add(new Student(15,"李四"));
treeSet.add(new Student(45,"王五"));
}
}
class Student0{
private int age;
private String name;
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student0(int age, String name) {
this.age = age;
this.name = name;
}
}
package aaa04180; import java.util.Comparator; public class MyComparator implements Comparator { @Override public int compare(Object o1, Object o2) { Student student1= (Student) o1; Student student2= (Student) o2; System.out.println(o1+"===="+o2); if(student1.getAge()>student2.getAge()){ return 1; }else if(student1.getAge()<student2.getAge()){ return -1; }else { return 0; } } }
public class MyComparator1 implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Student student1= (Student) o1;
Student student2= (Student) o2;
System.out.println(o1+"===="+o2);
if(student1.getAge()>student2.getAge()){
return 1;
}else if(student1.getAge()<student2.getAge()){
return -1;
}else {
return 0;
}
}
}
==========================================================
map中得每个元素属于键值对模式。 如果往map中添加元素时 需要添加key 和 value. 它也属于一个接口,该接口常见得实现类有: HashMap.
package aaa04180; import java.util.HashMap; import java.util.HashSet; import java.util.Map; public class Test1 { public static void main(String[] args) { Map map = new HashMap(); map.put("k1","v1"); map.put("k2","v2"); map.put("k3","v3"); map.put("k4","v4"); System.out.println(map); Map m1 = new HashMap(); m1.put("name","孙悟空"); m1.put("name2","猪八戒"); map.putAll(m1); System.out.println(map); map.putIfAbsent("age",400);//Kge不存在放入map中 map.putIfAbsent("name",500);//Kge存在不放入map中 System.out.println(map); //删除 map.remove("k3"); System.out.println(map); //清空 // map.clear(); // System.out.println(map); // map.replace("k1","哈哈哈哈哈"); System.out.println(map); } }
import java.util.HashMap;
import java.util.Map;
public class Test11 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("k1","v1");
map.put("k2","v2");
map.put("k3","v3");
map.put("k4","v4");
System.out.println(map);
Map m1 = new HashMap();
m1.put("name","孙悟空");
m1.put("name2","猪八戒");
map.putAll(m1);
System.out.println(map);
map.putIfAbsent("age",400);
map.putIfAbsent("name",500);
System.out.println(map);
map.remove("k3");
System.out.println(map);
// map.clear();
// System.out.println(map);
map.replace("k1","哈哈哈哈哈");
System.out.println(map);
}
}
{k1=v1, k2=v2, k3=v3, k4=v4}
{k1=v1, k2=v2, k3=v3, name=孙悟空, k4=v4, name2=猪八戒}
{k1=v1, k2=v2, k3=v3, name=孙悟空, k4=v4, name2=猪八戒, age=400}
{k1=v1, k2=v2, name=孙悟空, k4=v4, name2=猪八戒, age=400}
{k1=哈哈哈哈哈, k2=v2, name=孙悟空, k4=v4, name2=猪八戒, age=400}
Process finished with exit code 0
HashMap的底层原理(JDK1.8):
存储元素使用得put(key,value),根据key得hash计算出相应得哈希值,根据相应得算法求出该元素在数组中得位置, 如果求出得哈希值相同,则称为哈希冲突,会根据equals来判断元素是否一致,如果equals不同,则存入单向链表上, 如果哈希碰撞得个数超过8个,则把链表转换为红黑二叉树。
JDK1.7和JDK1.8 HashMap得区别。
JDK1.7使用得数据结构: 数组+链表 而且链表插入模式为头部插入(造成死循环)。
jdk1.8使用得数据结构: 数组+链表+红黑树 而且链表得插入模式为尾部插入。
黑红二叉树,查询效率很高但非常消耗资源 /
package aaa04180; import java.util.HashMap; import java.util.Map; import java.util.Set; public class Test2 { public static void main(String[] args) { Map map = new HashMap(); map.put("k1","v1"); map.put("k2","v2"); map.put("k3","v3"); map.put("k4","v4"); //查询 boolean f = map.containsKey("k4"); System.out.println(f); //根据Key获得Value植 Object v = map.get("k3"); System.out.println(v); //返回所有的Key Set keys = map.keySet(); System.out.println(keys); //遍历 for (Object k:keys){ Object value = map.get(k); System.out.println(k+"=============="+value); } } }
public class Test22 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("k1","v1");
map.put("k2","v2");
map.put("k3","v3");
map.put("k4","v4");
boolean f = map.containsKey("k4");
System.out.println(f);
Object v = map.get("k3");
System.out.println(v);
Set keys = map.keySet();
System.out.println(keys);
for (Object k:keys){
Object value = map.get(k);
System.out.println(k+"=============="+value);
}
}
}
true
v3
[k1, k2, k3, k4]
k1==============v1
k2==============v2
k3==============v3
k4==============v4
Process finished with exit code 0