A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周飞飞 中级黑马   /  2015-8-14 11:02  /  266 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


数组集合的区别:
        数组是固定长度的,集合是可变的
        数组只能存同一种类型的,集合可以存任意类型的对象的


Collection中的共性方法:
                        1、添加
                                <1>.boolean add(E e)         确保此 collection 包含指定的元素(可选操作)。
                                        a,add的参数是Object类型,以便于接受任意类型对象。
                                        b,集合中存储的都是对象的引用(地址);
                                <2>.boolean addAll(Collection<? extends E> c)
                                  将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
                        2、获取长度 int size()
                                          返回此 collection 中的元素数。
                        3、删除元素
                                <1>.移除一个元素boolean remove(Object o)
                                  从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
                                <2>.清空缓冲区; void clear()
                                  移除此 collection 中的所有元素(可选操作)。
                        4、判断元素:
                                boolean contains(Object o)
                                  如果此 collection 包含指定的元素,则返回 true。
                                 boolean isEmpty()
                                  如果此 collection 不包含元素,则返回 true。
                  5、boolean retainAll(Collection<?> c) (取交集)
                          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作
                        6、boolean removeAll(Collection<?> c)
                          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
                        7、 boolean containsAll(Collection<?> c)
                          如果此 collection 包含指定 collection 中的所有元素,则返回 true
                        8、Iterator<E> iterator()
                          返回在此 collection 的元素上进行迭代的迭代器。
                        9、Object[] toArray()
                            返回包含此 collection 中所有元素的数组。
                        <T> T[] toArray(T[] a)
                                  返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。


常用子类;
        |--List:元素有序,可以重复,有索引
                特有方法:
                        增:
                                void add(int index, E element)   在列表的指定位置插入指定元素(可选操作)。
                                addAll(index ,Collection);
                        删:
                                remove(index);
                        改:
                                set(index,element);
                        查:
                                get(index);
                                subList(from,to);
                                ListIterator();
                               
                        注意;在迭代的时候,不能用集合对象进行添加或者删除元素。
                                但是可以使用Iterator中的方法。但是只有删除。
                        出现         List集合特有的迭代器ListIterator 只有List集合存在
                       
                                 void add(E e)
                                  将指定的元素插入列表(可选操作)。
                                 boolean hasNext()
                                          以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。
                                 boolean hasPrevious()
                                          如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
                                 E next()
                                          返回列表中的下一个元素。
                                 int nextIndex()
                                          返回对 next 的后续调用所返回元素的索引。
                                 E previous()
                                          返回列表中的前一个元素。
                                 int previousIndex()
                                          返回对 previous 的后续调用所返回元素的索引。
                                 void remove()
                                          从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。
                                 void set(E e)
                                          用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。

                       
                常用实现子类
                        |--ArrayList 1.2
                        底层是数组结构:线程不同步
                                判断元素是否存在只依赖equals方法
                                特点 查找速度快,增删速度较慢。
                        |--LinkedList
                        底层是链表结构:
                                特点:查找速度较慢,增删速度较快
                                特有方法:
                                        addFirst();
                                        addLast();
                                        getFirst();
                                        getLast();
                                                获取不 删除元素 如果没有元素有异常
                                        removerFirst();
                                        removerLast();
                                                获取并删除元素 如果没有元素有异常
                                1.6代替方法
                                        offerFirst();
                                        offerLast();
                                       
                                        peekFirst();
                                        peekLast();
                                                获取不删除元素,如果没有元素 返回null
                                               
                                        pollFirst();
                                        pollLast();
                                                获取删除元素,没有元素返回null
                                       
                                       
                                       
                                       
                        |--Vector 1.0;
                        底层是数组数据结构:线程同步
                         被ArrayList替代了
                        特有方法 枚举 Enumeration en  = v.elements();和迭代一样;
                               
        |--Set:无序 不可以重复(存入和取出的顺序不一定一致)
                |--HashSet 底层是hash表结构                  
                        HashSet 是如何保证元素的唯一性:
                                通过元素的两个方法,hashCode和equals方法来完成。如果hashCode值相同,才会调用equals方法进一步判断
                                注意:判断和删除元素必须依赖hashCode值和equals方法; 先判断hashCode值再有equals方法进行判断
                               
                |--TreeSet  底层是二叉树
                        TreeSet可以对元素排序
                        保证数据的唯一性:底层调用了compareTo方法
                        排序方式一:让元素自身具备比较性实现Comparable接口复写compareTo方法
                        排序方式二:当元素自身不具备比较性时让集合自身具备比较性
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetDemo {

        public static void main(String args[]){
                //TreeSet ts = new TreeSet();// 第一种排序方式  元素自身
                TreeSet ts = new TreeSet(new myCompare() );//第二种排序方式  集合自身
               
                ts.add(new Person1("zhou06",15));
                ts.add(new Person1("zhou05",16));
                ts.add(new Person1("zhou04",17));
                ts.add(new Person1("zhou03",18));
                ts.add(new Person1("zhou02",19));
                ts.add(new Person1("zhou01",20));
               
                Iterator it =ts.iterator();
                while(it.hasNext()){
                        Object obj =it.next();
                        Person1 p =  (Person1)obj;
                        System.out.println(p.getName()+"::"+p.getAge());
                }
        }
        public static void method_reverce(){
                TreeSet ts = new TreeSet();
                ts.add(1);
                ts.add(2);
                ts.add(4);
                ts.add(6);
                ts.add(3);
                Iterator it =ts.iterator();
                while(it.hasNext()){
                        System.out.println(it.next());
                }
        }
}
class myCompare implements Comparator{

        @Override
        public int compare(Object o1, Object o2) {
                Person1 p1 = (Person1)o1;
                Person1 p2 = (Person1)o2;
                int num =p1.getName().compareTo(p2.getName());
                if(num==0){
                        //Integer i = new Integer(p1.getAge());
                        return new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
                }
                return num;
        }

       
       
}
class Person1 implements Comparable{
        private String name;
        private int age;
        Person1(String name,int age){
                this.name = name;
                this.age = age;
        }
        public String getName(){
                return name;
        }
        public int getAge(){
                return age;
        }
        @Override
        public int compareTo(Object obj) {
                if(!(obj instanceof Person1)){
                        return -1;
                }
                Person1 p = (Person1)obj;
                System.out.println(this.name+"...compareTo...."+p.name);
                if(this.age> p.age)
                        return 1;
                if(this.age==p.age)
                {
                        return this.name.compareTo(p.name);
                }
                return -1;
        }
}


4 个回复

倒序浏览
谢谢分享,如果能写在代码框里面阅读性就更好了
回复 使用道具 举报
挺好的~~~~
回复 使用道具 举报
这个总结的还算比较全面
回复 使用道具 举报
很好,很全面,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马