1 Java的集合可以分为Collection和Map两种体系
①Conllection接口
set:元素无序,不可重复
list:元素有序,可以重复
实例代码讲解:
1 import java.util.ArrayList; 2 import java.util.Date; 3 import java.util.Iterator; 4 import java.util.LinkedHashSet; 5 import java.util.List; 6 import java.util.Set; 7 8 import org.junit.Test; 9 10 /* 11 * 存储方式:1.顺序结构 2.链式存储 12 * 13 * 1.数据的存储的“容器”:①数组 int[] arr = new int[10]②集合 14 * 2.Collection:用来存储一个一个的数据 15 * |-----Set:存储无序的、不可重复的数据--相当于高中的"集合"--“哈希算法” 16 * |----HashSet:主要的实现类 17 * |----LinkedHashSet:对于频繁的遍历,效率高 18 * |----TreeSet:可以按照添加的元素的指定属性进行排序遍历(自然排序Comparable(compareTo(Object obj))&定制排序Comparator(compare(Obejct obj1,Object obj2))) 19 * |-----List:存储有序的、可以重复的数据--相当于"动态"数组 20 * |----ArrayList:主要实现类,线程不安全的 21 * |----LinkedList:对于频繁的插入、删除操作,效率高于ArrayList 22 * |----Vector:古老的实现类,线程安全的 23 * 24 * Map:用来存储一对一对的数据(key-value)---相当于y = f(x). y = x + 1;(x1,y1)(x2,y2) 25 * |----HashMap 26 * |----LinkedHashMap 27 * |----TreeMap 28 * |----Hashtable 29 * |----Properties 30 */ 31 public class TestCollection { 32 33 @Test 34 public void test2(){ 35 Set set = new LinkedHashSet(); 36 set.add(123); 37 set.add("AA"); 38 set.add("MM"); 39 set.add("GG"); 40 set.add("GG"); 41 //原则:添加自定义类的对象到Set中时,需要自定义对象所在的类重写:equals()且hashCode(); 42 set.add(new Person("谢霆锋",32)); 43 set.add(new Person("谢霆锋",32)); 44 set.add(new Person("王菲",23)); 45 46 System.out.println(set.toString()); 47 48 } 49 @Test 50 public void test1(){ 51 List list = new ArrayList(); 52 System.out.println(list.size());//0 53 54 list.add("AA"); 55 list.add(123); 56 list.add(123); 57 list.add(new Date()); 58 59 Iterator iterator = list.iterator(); 60 while(iterator.hasNext()){ 61 System.out.println(iterator.next()); 62 } 63 64 } 65 }
1 public class Person { 2 String name; 3 int age; 4 public Person(String name, int age) { 5 super(); 6 this.name = name; 7 this.age = age; 8 } 9 @Override 10 public String toString() { 11 return "Person [name=" + name + ", age=" + age + "]"; 12 } 13 @Override 14 public int hashCode() { 15 final int prime = 31; 16 int result = 1; 17 result = prime * result + age; 18 result = prime * result + ((name == null) ? 0 : name.hashCode()); 19 return result; 20 } 21 @Override 22 public boolean equals(Object obj) { 23 if (this == obj) 24 return true; 25 if (obj == null) 26 return false; 27 if (getClass() != obj.getClass()) 28 return false; 29 Person other = (Person) obj; 30 if (age != other.age) 31 return false; 32 if (name == null) { 33 if (other.name != null) 34 return false; 35 } else if (!name.equals(other.name)) 36 return false; 37 return true; 38 } 39 40 41 }
如何实现List、Set,数组之间的转换
ArraryList list=new ArraryList() 造一个数组链表list
Set set=new HashSet(list) 把list转化成Set
List list1=new ArraryList(set) 把set转化为list1
②Map接口:具有“key-value”映射关系的集合