java基础学习——集合
-------|List: 有存储顺序, 可重复
-----------|ArrayList: 数组实现, 查找快, 增删慢,由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快
-----------|LinkedList: 链表实现, 增删快, 查找慢由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素. 这样的增删 效率较高但查询时需要一个一个的遍历, 所以效率较低
-----------|Vector: 和ArrayList原理相同, 但线程安全, 效率略低和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低
-------|Set: 无存储顺序, 不可重复
-----------|HashSet 线程不安全,存取速度快。底层是以哈希表实现的。
-----------|TreeSet 红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,那么元素重复。
-------| Map: 键值对 键不可重复,键可以重复
-----------|HashMap 线程不安全,存取速度快。底层是以哈希表实现的.
-----------|TreeMap 红-黑树的数据结构,默认对元素进行自然排 序(String)。如果在比较的时候两个对象返回值为0,那么元素重复
-----------|HashTable 底层也是使用了哈希表 维护的,存取的读取快,存储元素是 无序的。
一、HashSet集合:无序存储,不可重复
当我们想创建一个hashset集合,往HashSet内添加元素的时候,会首先调用HashCode方法得到哈希值,然后把哈希值经过运算 算出来该元素在哈希表中位置,如果该位置不存在别的元素则直接加进去,如果存在别的元素则调用equals()方法与该位置上的方法比较一次。
1.元素为string类型,可以直接用HashSet<string>集合来创建,string集合重写了hashcode()和equals()方法
2.元素为自定义对象,需要重写重写了hashcode()和equals()方法。
1 class Person { 2 int id; 3 String name; 4 5 public Person (int id, String name ){ 6 super(); 7 this.id= id; 8 this.name= name; 9 } 10 @Override 11 public int hashCode() { 12 // TODO Auto-generated method stub 13 return this.id; 14 } 15 @Override 16 public boolean equals(Object obj) { 17 Person person = new Person(id, name); 18 return this.id==person.id; 19 } 20 @Override 21 public String toString() { 22 return "编号:"+this.id+" 姓名:"+this.name +" hashcode:"+this.hashCode(); 23 } 24 } 25 public class demo1 { 26 public static void main(String[] args) { 27 HashSet<Person> set = new HashSet<Person>(); 28 set.add(new Person(001,"jjj")); 29 set.add(new Person(001,"jjj")); 30 System.out.println("集合的元素:"+set); 31 } 32 }
运行结果:
集合的元素:[编号:1 姓名:jjj hashcode:1]
二、集合的遍历
1 public static void main(String[] args) { 2 ArrayList<String > list = new ArrayList<>(); 3 list.add("张三"); 4 list.add("李四"); 5 list.add("王五"); 6 System.out.println("----------get方式遍历----------"); 7 for (int i = 0; i < list.size(); i++) { 8 System.out.println(i+":"+list.get(i)); 9 } 10 11 12 //迭代器遍历 13 14 HashSet<String > hashSet = new HashSet<>(); 15 hashSet.add("老大"); 16 hashSet.add("老二"); 17 hashSet.add("老三"); 18 System.out.println("---------迭代器遍历----------"); 19 Iterator<String> iterator = hashSet.iterator(); 20 while (iterator.hasNext()) { 21 System.out.println(iterator.next()); 22 } 23 24 for(String item:hashSet){ 25 System.out.println(item+","); 26 } 27 28 Map<String , String > map = new HashMap<String , String >(); 29 map.put("001","z001"); 30 map.put("002","z002"); 31 map.put("003","z003"); 32 Set<Entry<String, String>> entrySet = map.entrySet(); 33 for (Entry<String, String> entry : entrySet) { 34 System.out.println("key:"+entry.getKey()+" value:"+entry.getValue()); 35 } 36 }