容器
List 有序可重复
Set 无序不可重复
Map 键值列 通过一个对象找另一个对象
容器有很多方法的实现 List和Set都继承自Collection 而其中Set和Collection基本差不多方法 而list是有序的 所以要比Collection多很多方法 多很多有关索引方面的方法· (因为顺序需要索引)
transient 短暂的: http://www.importnew.com/21517.html 只存在调用者的内存中 而不会写在磁盘里面永久化
util包下面
List:
package Collection;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
List list=new ArrayList();
list.add("陈幸源");
list.add("陈幸源");
list.add("方秋丽");
list.add("刘晨");
list.add(new Date());
list.add(new Date());
list.add(1234);//包装类自动装箱 Interger Integer i=18;
list.remove("陈幸源");
list.remove(new Date());
for (Object object : list) {
System.out.println(object);
}
/*System.out.println(list.size());
System.out.println(list.get(0));
System.out.println(list.get(1));*/
/* Integer a=-129;
Integer b=-125;
System.out.println(a==b);
System.out.println(list.size());//这size 和ArrayList 类中的 Object[]数组大小是不一样的 后者要比较大
// System.out.println(ArrayList.DEFAULTCAPACITY_EMPTY_ELEMENTDATA.length());
Class t=ArrayList.class;
Field t1;
try {
t1 = t.getDeclaredField("EMPTY_ELEMENTDATA");
System.out.println(t1.getName());
} catch (NoSuchFieldException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SecurityException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
list.remove("刘晨");
list.remove(new Date());//hashcode and equals
System.out.println(list.size());
List list2=new ArrayList();
list2.add("nihao");
list2.add("wohao");
list.addAll(list2);
System.out.println(list.size());
//顺序有关
System.out.println(list.get(0));
list.set(0, "陈幸源酷酷的");
System.out.println(list.get(0));
Date h=new Date();
Date h1=new Date();
System.out.println(h==h1);
System.out.println(h.equals(h1));*/
}
}
class Bom{
private String name;
}
注意 基本上大部分类的equals方法都重写了 不再是Object中的意思 和==一样在Object类中 需要对象的引用相等才是true
重写后一般都是写成内容相等就是itrue 所以new Date()删New Date()它删除的就是相通的内容 而不是对象引用相等 因为明显是两个不同的对象哦 new创建新对象
然后 如果有相同的 要移出 只会移出最先找到的哪一个就返回了
。
List Set Map都是借口哈
模拟链表
package Collection;
import java.util.List;
import javax.imageio.event.IIOReadProgressListener;
import javax.print.attribute.Size2DSyntax;
public class SxLinkedList /*implements List*/{
private Node first;//头
private Node last;//尾
private int size;
public void add(Object obj){
Node n=new Node();
if(first==null){
n.setPrevious(null);
n.setNext(null);
n.setObj(obj);
first=n;
last=n;
}else{
n.setPrevious(last);
n.setNext(null);
n.setObj(obj);
last.setNext(n);
last=n;
}
size ++;
}
public int size(){
return size;
}
public Node Index(int index){
Node temp=new Node();
if(index>=0){
if(first==null){
}else{
temp=first;
while(temp.next!=null){
for(int i=0;i<index;i++){
temp=temp.next;
}
return temp;
}
}
}
return null;
}
public Object get(int index){
Node temp=Index(index);
return temp.getObj();
}
public void remove(int index){
Node node=Index(index);
if(node.next!=null&&node.previous!=null){
Node up=node.previous;
Node down=node.next;
up.next=down;
down.previous=up;
}else if(node.previous!=null&&node.next==null){
Node up=node.previous;
up.next=null;
}else if(node==first){
if(node.next==null){
first.setObj(null);
}else{
Node node1=first.next;
first=node1;
first.previous=null;
}
}
size--;
}
public void add(int index,Object obj){
Node temp=new Node(null,obj,null);
Node node=Index(index);
if(index>=0&&index<size){
Node up=node.previous;
up.next=temp;
temp.previous=up;
temp.next=node;
node.previous=temp;
size++;
}
}
public static void main(String[] args) {
SxLinkedList list=new SxLinkedList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add(2,"eee");
list.add(2,"fff");
list.add(2,"ggg");
list.add(2,"hhh");
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
/*System.out.println(list.size());
System.out.println(list.size);
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println(list.get(3));
list.remove(0);
System.out.println(list.size());
System.out.println(list.get(0));*/
}
}
package Collection;
public class Node {
Node previous;
private Object obj;
Node next;
public Node(){
}
public Node(Node previous, Object obj, Node next) {
super();
this.previous = previous;
this.obj = obj;
this.next = next;
}
public Object getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public Object getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
Map
package Collection;
import java.util.HashMap;
import java.util.Map;
public class TestMap {
public static void main(String[] args) {
Map map=new HashMap();
map.put("陈幸源", new wife("方秋丽"));
map.put("幸源", "秋丽");
System.out.println(map.get("陈幸源"));
System.out.println(map.get("幸源"));
map.put("chen", "liu");
boolean b=map.containsKey("chen");
boolean c=map.containsKey("xing");
System.out.println(b);
System.out.println(c);
}
}
class wife{
String name;
public wife(String name){
this.name=name;
}
}
HashMap:线性不安全效率高
HashTable:线性安全效率低
模拟Map 看看写法哈
public Object get(Object a){
for(int i=0;i<size;i++){
if(arr[i].key.equals(a)){
return arr[i].value;
}
}
return null;
}
没有就返回null就行