JAVA学习笔记-07
2017-11-01 14:18
351 查看
1.容器
接口图List:有序可重复
Set:无序不可重复
Map:key&value,
public class ColletionTest { public static void main(String[] args) { List l = new ArrayList(); l.add("zzz"); l.add(new Date()); l.add(123);//自动装箱 List l2 = new ArrayList(); l2.add("aaa"); l2.add("bbb"); l.add(l2); l.remove(new Date());//hashcode和equals System.out.println(l.get(2)); System.out.println(l.size()); } }
//ArrayList:底层数组实现,线程不安全,查询块,插入,删除慢
//LinkedList:底层是列表实现,线程安全,查询慢,插入,删除快
//Vector:线程安全,效率低
Map接口实现的类有HashMap和TreeMap。存储键值对,键不能重复!
底层结构:数组+链表
HashMap:效率高,线程不安全
HashTable:效率低,线程安全
//初次实用Map public class MapTest { public static void main(String[] args) { Map map = new HashMap(); map.put("高琪", new Wife("张曼玉")); Wife w= (Wife)map.get("高琪"); System.out.println(w.name); } } class Wife{ String name; public Wife(String name){ this.name = name; } }
//实现简单的Map public class MyMap { public static void main(String[] args) { MyMap m = new MyMap(); m.put("husband","wife"); m.put("husband2", "wife2"); System.out.println( m.get("husband2"));//wife2 } MyEntry[] arr = new MyEntry[999]; int size; public void put(Object key,Object value) { MyEntry e = new MyEntry(key,value); arr[size++]=e; } public Object get(Object key) { for(int i =0;i<size;i++) { if(arr[i].key.equals(key)) { return arr[i].value; } } return null; } public boolean containsKey(Object key) { for(int i =0;i<size;i++) { if(arr[i].key.equals(key)) { return true; } } return false; } } class MyEntry{ Object key; Object value; public MyEntry(Object key, Object value) { super(); this.key = key; this.value = value; } }
//高级链接 public class MyMap2 { public static void main(String[] args) { MyMap2 map = new MyMap2(); map.put("0", "a"); map.put("1", "b"); System.out.println(map.get("0")); } LinkedList[] arr = new LinkedList[999];//链表 int size; public void put(Object key, Object value) { MyEntry e = new MyEntry(key,value); int a = key.hashCode()%999; if(arr[a]==null){ LinkedList list =new LinkedList(); arr[a]=list; list.add(e); }else { LinkedList list=arr[a]; for(int i=0;i<list.size();i++) { MyEntry e2 =(MyEntry)list.get(i); if(e2.key.equals(key)) { e2.value=value;//键重复,直接覆盖 } } arr[a].add(e); } } public Object get(Object key) { int a = key.hashCode()%999; if(arr[a]!=null) { LinkedList list =arr[a]; for(int i= 0;i<list.size();i++) { MyEntry e=(MyEntry)list.get(i); if(e.key.equals(key)) return e.value; } } return null; } }
equals和hashcode
如果两个对象equals相同,hashcode一定相同。反之不然。
相关文章推荐
- Java学习笔记 - 07
- java学习笔记07--日期操作类
- Java 学习笔记07:使用Spring的Dao连接数据库
- java学习笔记.07——内部类
- java学习笔记07--日期操作类
- Java学习笔记_07
- 黑马程序员_java基础学习笔记07_IO流
- java学习笔记07—IO流
- JAVA学习笔记07——Hibernate框架第一章
- Java学习笔记06-07
- (13)Java学习笔记——面向对象07——多态
- mongo-java-driver -3.2.2学习笔记-07-GridFs
- (14)Java学习笔记——面向对象07——内部类
- JavaWeb学习笔记-mybatis-07-dao开发使用(原始dao方法)
- 09 12 07 Java web 学习笔记
- java学习笔记07-2
- 【学习笔记07】java面向对象-继承
- java个人学习笔记07(封装+构造函数+this)
- Java基础学习笔记【07】Collection、List、Map
- java学习笔记-07