集合接口一

容器(Collection)
数组是一种容器, 集合也是一种容器
java编程中, 装其他各种各样的对象(引用类型)的一种东西, 叫容器

(图书馆里所有的书, 要想管理图书馆里所有的书, 就需要先把这些书放到一个东西里面, 目前掌握的知识来说, 只能是数组,
数组的长度是固定的, 这就出现一个问题, 数组的长度该定义成多长 ? 长度是不固定的, 因为不知道有多少本书, 这个时候需
要这样一种机制: 定义一种东西, 长度不固定, 可以随时添加和删除, 这种东西就是Collection, 只要不超出内存, 随便往里添加)

Collection
List---(有顺序, 可以重复-->可以互相equals(引用类型))---下标
LinkedList(链表)---(改快,查慢)
*ArrayList(数组)---(改慢,查快)
Set---(没有顺序, 不可以重复)
*HashSet(hash码表)(必须重写hashCode()方法)
TreeSet(二叉树---数据结构)
Map(键值对)(键不能重复)
Map<Person.hashCode(), int>
*HashMap
TreeMap

Comparable(一个方法(comparaTo))
Iterator(循环遍历, 3个方法)
boolean hasNext()
Object next()
remove()
while(hasNext()) {
next()
}

 

 


Collection---接口:
Set接口
*HashSet---实现类(以哈希码表为底层的实现机制)
TreeSet---实现类(以二叉树(一种数据结构)为底层的实现机制)
没有顺序, 不可以重复(可以互相equals就叫重复)
List接口
*ArrayList---实现类(以数组为底层的实现机制)
LinkedList---实现类(以链表为底层的实现机制)
有顺序, 可以重复

Map接口(键值对)
*HashMap---实现类
TreeMap---实现类
每次往里放的时候都是一对一对的

Collection接口的方法
Collection接口的使用
Collection<String> c = new ArrayList<String>();
问题: 为什么不直接写ArrayList<String> a = new ArrayList<String>();
c.add(参数类型必须是Object)

c.remove方法: 通过判断两个对象是否互相的equals来确定是不是该删除该对象, 自定义的类, 需要自己重写父类的equals方法
重写equals方法, 也应该重写hashCode方法

hashCode通常用来做索引, 一个对象通过它的hashCode的值可以找到它在内存中的地址, 所以两个对象如果equals了, 而且又要作为索引的情况下, hashCode的值必须相等

import java.util.Arrays;

public class MyArray {
    
     private Object[] objs;
     private int size;
     
     public MyArray(){
         objs = new Object[10];
         size = 0;
     }
     public int size(){
         return size;
     }
     public boolean add(Object o){
         if(size<objs.length){
             objs[size]=o;
         }else{
             Object[] os=Arrays.copyOf(objs, size+1);
             os[size]=o;
             objs=os;
         }
         size++;
         if(size==objs.length){
             return true;
         }
         return false;
     }
     public String toString(){
        Object[] onew = new Object[size];
        for(int i=0;i<size;i++){
            onew[i]=objs[i];
        }
        return Arrays.toString(onew);
     }
     
}
import util.MyArray;

public class Text {
    public static void main (String[] args){
         MyArray ma = new MyArray();
         ma.add("aaa");
         ma.add("bbb");
         ma.add("ccc");
         ma.add(222);
         ma.add(333);
         System.out.println(ma.size());
         System.out.println(ma);
    }
}
import java.util.ArrayList;
import java.util.Collection;

public class TextCollection {
    public static void main(String[] args){
        Collection c=new ArrayList();
        c.add(2);
        c.add("hello");
        c.add(new Person());
        System.out.println(c);
        
        c.remove(2);
        c.remove("hello");
        c.remove(new Person());
        System.out.println(c.size());
        System.out.println(c);
    }
}
class Person{

    @Override
    public String toString() {
        return "Person [哈哈]";
    }
    
}

 

posted @ 2017-07-28 21:10  挽你何用  阅读(136)  评论(0编辑  收藏  举报