您的位置:首页 > 编程语言 > Java开发

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