---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
1.集合框架体系图
?
2:总结下面集合的特点
Collection:
?|--List
??该集合体系中的元素是有序的,元素可以重复
??|--ArrayList
???集合中存储的元素是有序的,元素可以重复,底层的数据结构
???是数组数据结构,查询速度快,增删慢,线程不同步,效率高
??|--Vector
???底层的数据结构是数组数据结构,查询速度快,增删慢,线程
???是同步的,效率低,集合中存储的元素是有可以序的,元素重
???复。
??|--LinkedList
???底层的数据结构是链表数据结构,查询速度慢,增删快,线程
???不同步,效率高。元素有序,且可以重复
?|--Set
??该集合体系中的元素是无序的,且元素不可以重复
??|--HashSet
???底层的数据结构是哈希表,依靠hashCode()方法和equals()
???方法保证元素的唯一性
???|--LinkedHashSet
????底层的数据结构是链表和哈希表,有哈希表保证元素
????的唯一性,链表保证元素的有序
??|--TreeSet
???底层的数据结构是二叉树,根据自然排序或比较器的返回值
???保证元素的唯一性和排序
???自然排序:对象自身具有比较性,自定义类实现comparable接
???口,
???比较器:集合具备比较性,接收Comparator的构造参数
Map:该集合体系中存储的是键值对
?|--HashMap
??集合底层的数据结构是哈希表,集合中存储的是键值对,且键在该集合
??中是唯一的。
?|--TreeMap
??集合底层的数据结构是二叉树。集合中存储的是键值对,且集合有二叉树,保证了元素可以有序
3:请总结什么时候使用哪种集合?
?如果要求线程是安全的,那么使用list体系中的Vector集合,如果不是,使用:
?A:键值对形式时:使用Map集合
??如果元素不要求排序,使用HashMap集合,如果要求元素排序,使用
??TreeMap集合
?B:不是键值对时且元素要求有序并且不可以重复:
??查询多时,使用ArrayList集合
??增删比较多时,使用LinkedList集合
?C:不是键值对,对元素顺序没有要求时且要保证不能有重复的元素
??使用HashSet
??如果要求有一定的顺序时,使用TreeSet
4:分别使用下面几种集合存储字符串和自定义对象并遍历。
A:ArrayList
//存储字符串并遍历
import java.util.ArrayList;
import java.Iterator;
public class ArrayListDemo1{
?public static void main(String[]args){
??ArrayList<String> al=new ArrayList<String>();
??
??al.add("sting1");
??al.add("string2");
??al.add("string3");
??
??Iterator<String> it =al.iterator();
??while(it.hasNext()){
???String s=it.next();
???System.out.println(s);
??}
??for(int i=0;i<al.size();i++){
???String s=al.get(i);
???System.out.println(s);
??}
??for(String als:al){
???System.out.println(als);
??}
?}
}
//自定义对象
public class Student{
?private String name;
?private int age;
?public Student(){}
?public Student(String name,int age){
??this.name=name;
??this.age=age;
?}
?public void setName(String name){
??this.name=name;
?}
?public String getName(){
??return name;
?}
?public void setAge(int age){
??this.age=age;
?}
?public int getAge(){
??return age;
?}
}
//自定义对象并遍历。
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo2{
?public static void main(String[]args){
??ArrayList<Student> al=new ArrayList<Student>();
??al.add(new Student("zhangsan",17));
??al.add(new Student("lisi",25));
??al.add(new Student("tianqi",19));
??al.add(new Student("wangwu",33));
??Iterator<Student> it=al.iterator();
??while(it.hasNext()){
???Student s=it.next();
???System.out.println(s.getName()+"****"+s.getAge());
??}
??for(int i=0;i<al.size();i++){
???Student s=al.get(i);
???System.out.println(s.getName()+"****"+s.getAge());
??}
?}
}
B:HashSet
?需求:如果对象的成员变量值都相同即为同一个元素
//自定义对象,在HashSet中此类不许实现comparable接口
public class Student{
?private String name;
?private int age;
?public Student(){}
?public Student(String name,int age){
??this.name=name;
??this.age=age;
?}
?public void setName(String name){
??this.name=name;
?}
?public String getName(){
??return name;
?}
?public void setAge(int age){
??this.age=age;
?}
?public int getAge(){
??return age;
?}
?public int hashCode(){
??return this.name.hashCode()+this.age*17;
?}
?public boolean equals(Object obj){
??if(this==obj){
???return true;
??}
??if(!(obj instanceof Student)){
???return false;
??}
??Student s=(Student)obj;
?? return this.name.equals(s.name)&&this.age==s.age;
?}
}
//自定义对象并遍历。
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo{
?public static void main(String[]args){
??HashSet<Student> hs=new HashSet<Student>();
??
??hs.add(new Student("zhangsan",17));
??hs.add(new Student("lisi",25));
??hs.add(new Student("tianqi",19));
??hs.add(new Student("wangwu",33));
??
??Iterator<Student> it=hs.iterator();
??while(it.hasNext()){
???Student s=it.next();
???System.out.println(s.getName()+"****"+s.getAge());
??}
??for(Student s:hs){
???System.out.println(s.getName()+"****"+s.getAge());
??}
?
?}
}
C:HashMap
?需求:如果对象的成员变量值都相同即为同一个元素
//自定义对象,在HashSet中此类不许实现comparable接口
public class Student{
?private String name;
?private int age;
?public Student(){}
?public Student(String name,int age){
??this.name=name;
??this.age=age;
?}
?public void setName(String name){
??this.name=name;
?}
?public String getName(){
??return name;
?}
?public void setAge(int age){
??this.age=age;
?}
?public int getAge(){
??return age;
?}
?public int hashCode(){
??return this.name.hashCode()+this.age*17;
?}
?public boolean equals(Object obj){
??if(this==obj){
???return true;
??}
??if(!(obj instanceof Student)){
???return false;
??}
??Student s=(Student)obj;
??return this.name.equals(s.name)&&this.age==s.age;
?}
}
import java.util.HashMap;
import java.util.Set;
public class HashMapTest{
?public static void main(String[]args){
??HashMap<String,Student> hm=new HashMap<String,Student>();
??hm.put("ts001",new Student("zhangsan",27));
??hm.put("ts002",new Student("wangwu",17));
??hm.put("ts003",new Student("tianqi",28));
??hm.put("ts004",new Student("zhaoliu",19));
??hm.put("ts005",new Student("zhangsan",27));
??Set<String> st=hm.keySet();
??for(String ss:st){
???Student s=hm.get(ss);
???System.out.println(ss+"="+"("+s.getName()+","+s.getAge()+")");
??}
??
?} ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net
}