您的位置:首页 > 其它

day17 集合框架 LinkedHashSet TreeSet Map 泛型

2017-01-13 08:51 411 查看
LinkedHashSet

LinkedHashSet类是HashSet类的子类:同时体现了双向链表和哈希表算法
  哈希表算法:决定了存储位置.
双向链表算法:用来包装在迭代的时候就是插入时顺序.

LinkedHashSet相对于HashSet来说,性能更低,因为需要保证输出顺序.
问题:既然想保证元素的添加顺序,为何不直接使用List的实现类.
因为:LinkedHashSet类不仅可以保证添加顺序还包装元素不能重复.

package _01_LinkedHashSet;

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

public class Demo1 {
public static void main(String[] args) {
Set  set = new HashSet();
set.add("430");
set.add("Burnning");
set.add("kaka");
set.add("820");
System.out.println(set);
//LinkedHashSet 从名字上可以看出存储在hash表里,
//双向链表算法用来包装在迭代的时候就是插入时顺序.
set = new LinkedHashSet();
set.add("one");
set.add("two");
set.add("Three");
System.out.println(set);
}

}
TreeSet

该类底层使用红黑色算法(平衡二叉树).
可以对集合中的数据按照一定的规则来排序.

注意:使用TreeSet,一定要包装该集合中的元素必须是同一种数据类型.

Comparable---->compareTo()

package _02_TreeSet;

import java.util.TreeSet;

public class Demo1 {

public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(new Student("王",23,70));
ts.add(new Student("赵",23,80));
ts.add(new Student("周",23,90));
System.out.println(ts);

}

}
class Student implements Comparable{
private String name;
private int age;
private int score;
Student(String name,int age,int score){
this.name = name;
this.age = age;
this.score = score;
}
@Override
public int compareTo(Object o) {
Student other = (Student)o;
if(this.score>other.score){
return 1;
}else if(this.score<other.score){
return -1;
}
return 0;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score
+ "]";
}

}
Comparator----->compare(Object  o1,Object  o2)

package _03_TreeSet;

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

public class Demo2 {
public static void main(String[] args) {
Set ts = new TreeSet(new StudentLength(){
public int compare(Object o1, Object o2) {
Student2 s1 = (Student2)o1;
Student2 s2 = (Student2)o2;
if(s1.getName().length()>s2.getName().length()){
return 1;
}else if(s1.getName().length()<s2.getName().length()){
return -1;
}
return 0;
}
});
Student2 s1 = new Student2("tea");
Student2 s2 = new Student2("mnnnnn");
Student2 s3 = new Student2("good");
Student2 s4 = new Student2("wills");
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
System.out.println(ts);
}

}
class Student2 {
private String name;
Student2(String name){
this.name = name;
}
public String getName(){
return name;
}
@Override
public String toString() {
return "Student [name=" + name + "]";
}
}
class StudentLength implements Comparator{

@Override
public int compare(Object o1, Object o2) {
Student2 s1 = (Student2)o1;
Student2 s2 = (Student2)o2;
if(s1.getName().length()>s2.getName().length()){
return 1;
}else if(s1.getName().length()<s2.getName().length()){
return -1;
}
return 0;
}

}
Map





Map和Set的关系

Map的常用的实现类:

Hashtable类:在没有集合框架之前,就使用Hashtable来表示映射关系.

    现在已经不推荐使用,建议使用HashMap类.

HashMap类:底层使用Hash表算法,和Hashtable有和关系?

通过阅读源代码发现,Hashtable中的每一个方法都是用synchronized修饰,HashMap中没有使用synchronized修饰.

HashMap相对于Hashtable来说,性能较高,但是安全性较低.

和 ArrayList  和 Vector的区别相同.

-----------------------------------------------------------

LinkedHashMap类:保证Map中的key会记录添加顺序.

TreeMap类:  保证Map中的key会按照指定的规则来排序.


Map的使用



package map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo1 {

/**
* @param args
*/
public static void main(String[] args) {
Map map = new HashMap();
map.put("zz", 19);
map.put("xx", 18);
map.put("cc", 20);
map.put("vv", 22);
System.out.println(map);
System.out.println("----------------------------------------");
Set t =map.keySet();
System.out.println(t);
System.out.println("----------------------------------------");
Collection l = map.values();
System.out.println(l);
System.out.println("----------------------------------------");
Set s2 = map.entrySet();
System.out.println(s2);
for (Object object : s2) {
Map.Entry entry = (Map.Entry)object;
System.out.println(entry.getKey()+":"+entry.getValue());
}
}

}
集合工具类

Collections

1先说个Arrays

package collections;

import java.util.Arrays;
import java.util.List;

public class ArraysDemo {
public static void main(String[] args) {
String[] name = {"一","二","三"};
List list = Arrays.asList(name);//字符串转换为List集合
for (Object object : list) {
System.out.println(object);
}
//list.add("四"); 转换的不能删除和添加

//List转换为数组
Object[] obj = list.toArray();

}

}
Collections讲的不多,这里就不写了.

泛型

? 通配符

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