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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wf111sxwf 中级黑马   /  2014-11-5 21:22  /  1006 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

集合类的由来:
                对象用于封装特有数据,对象多了需要储存,如果对象的个数不确定,
                就使用集合容器进行储存。
集合的特点:
1.用于存储对象的容器。
2.集合的成都市可变的。
3.集合中不可以存储基本数据类型值。



集合容器因为内部数据结构不同,有多种具体容器。
不断向上抽取,就形成了集合框架。

框架的顶层就是collection接口:

collection的常见功能:
1.添加。
                boolean add(Object obj);
                boolean addAll(collection coll);添加多个对象

2.删除。
                boolean remove(Object obj);
                boolean removeAll(collection coll);删除多个对象。
                void clear();清空集合中的所有对象。

3.判断:
                boolean contains(Object obj);
                boolean containsAll(collection coll);
                boolean isEmpty();判断集合中是否有元素。
               
4.获取。
                int size();
                iterator iterator();取出元素的方式:迭代器。
                该对象必须依赖于具体容器,因为每个容器的数据结构不同
                所以该迭代器对象实在容器内部实现的(内部类),。
                对于容器使用者而言,具体的实现并不重要,只要通过容器获取该实现的迭代器对象即可,
                也就是iterator方法。
               
                Iterator接口就是所有Collection容器进行元素取出的公共接口。

5.其他
                boolean retainAll(collectin coll);取交集。
                Object[] toArray();把集合转换成数组。
--------------------------------------------------------------
Collection
               
                |--- List: 有序(取出和存入的顺序一致),元素都有索引(角标)。元素可以重复。
               
                |--- Set:元素不能重复,无序。
               
                List特有常见方法:
                添加:
                void add(index,element);
                void add(index,collection);
               
                删除:
                Object remove(index);
               
               
                修改:
                Object set(index,element);
               
                获取:
                Object get(index);
                int indexOf(object);
                int lastIndexOf(object);
                List subList(from,to);
               
                List集合可以完成对元素的增删改查的。
               
                List:
               
                        |--Vector; 内部是谁数据结构。是同步的。增删查询都很慢。
                        |--ArrayList; 内部是数组数据结构,是不同步的。替代了Vector.查询的速度快。
                        |--LinkedList;   内部是链表数据结构。是不同步的。增删元素的速度快。

                               

LinkdeList集合
           addFirst();
           addLast();
                         jdk1.6新方法
           offerFirst();
           offerLast();
           getFirst();//获取但不移除元素
           getLast();//当集合为空时会抛出异常。
           jdk1.6以后的新方法
           peekFirst();
           peekLast();//当集合为空时返回null.
           removeFirst();//获取并移除元素。
           removeLast();
                        jdk1.6
                        pollFirst();//当集合为空时返回null.
                        pollLast();
--------------------------------------------------------------------------------------------------------

Set集合:元素不可以重复,无序。

                Set接口中的方法和Collection一致。
                |--HashSet;内部数据结构是哈希表。是不同步的。
                哈希表判断两个元素是否相同:
                1.首先判断两个元素的哈希值是否相同。如果相同就判断两个元素的内容是否相同。
                2.        判断哈希值其实就是判断hashCode的方法返回值是否相同。判断内容相同用的是equals方法。
               
                注意:如果哈希值不同,不需要判断equals.
               
                |--TreeSet;        可以对Set集合中的元素进行排序,是不同步的。
                                                                判断元素唯一的方式:就是根据比较方法返回的结果是我否为0,是0,不存。
                                                               
                                                                TreeSet对元素排序的方式一:
                                                                让元素自身实现compareble接口,覆盖conpareTo方法。
                                                               
                                                                如果不想使用元素中的自然顺序排序,或者集合中不具备自然排序,
                                                                可以使用TreeSet集合的排序方式二:
                                                                让集合自身具备排序功能。定义一个类实现Comparetor接口,覆盖compare方法,
                                                                并将该类对象作为参数作为参数传递给TreeSet集合的构造函数。
---------------------------------------------------------------------------------------------------
Map:一次添加一对元素,Collection一次添加一个元素。
                Map集合也称为双列集合,Collection集合也称为单列集合。
                其实Map集合中存储的是键值对。
                Map集合中必须保证键的唯一性。
               
               
常用方法:

1.添加
                  value put(key,value);返回前一个和key关联的值,如果没有返回null.

2.删除
                 void      clear();清空集合。
                value  remove(key); 根据制定的key上存储这个键对。

3.判断
                boolean containsKey(key);
                boolean containsValue(value);
                boolean isEmpty();
                               
4.获取
                value get(key);通过键获取值。如果没有该键 返回null.
                                                                可以通过返回(null,来判断是否包含制定键。
                int size();获取键值对的个数。
               
               
               
Map常用子类
                        |--Hashtable :内部结构是哈希表,是同步的。不允许null作为键也不允许null作为值。
                       
                              |--properties:用于储存键值对型的配置文件信息。可以和IO技术相结合。
                       
                        |--HashMap:内部结构是哈希表,不同步。允许null作为键和值。
                       
                        |--TreeMap:内部结构是二叉树,不是同步的,可以对Map集合中的键进行排序。
               
               
        ------------------------------------------------------------------------------------------------
       
       
泛型
                jdk1.5以后出现的安全新特性。               
               
好处:
                1.将运行时的问题ClassCastException转到了编译时期。
                2.避免了强制转换的麻烦。       
               
<>什么时候用呢?当操作的引用型数据不确定时,用<>.将要操作的引用数据类型传入即可。
<>其实就是一个勇于接受引用数据类型的参数范围。
                 
                 
在程序中只要用到了带有<>的类或者接口,就要明确传入具体的引用数据的类型。
                 
泛型技术室个编译器使用的技术,用于编译时期,确保了类型的安全。
运行时,会将泛型去掉,生成的Class文件中是不带泛型的,这个称为泛型的擦除。
为什么擦除呢?为了兼容运行时的类加载器。       

泛型的补偿:
                       通过运行时,获取元素的类型进行转换动作。不用使用者再强制转换了。
                      
泛型的通配符:?未知类型。

------------------------------------------------------------------------------------------------------

集合的一些技巧:

                需要唯一么?
               
                需要:Set
                                需要指定顺序么?
                                        需要:TreeSt
                                        不需要:HashSet
                                        但是想要一个和存储顺序一致的顺序(有序):LinkedHashSet
                                       
               
                不需要:List
                                需要频繁增删么?
                                                需要:LinkedList
                                                不需要:ArrayList
                                               
                                               
        如何记录每一个容器的数据结构和所属体系呢?
       
                        看名字!
List               
                |--ArrayList
                |-- LinkedList
               
Set
                |--HashSet
                |--TreeSet               
               
后缀名就是所属体系。               

前缀名就是集合的数据结构。

看到Array:就要想到数组,就要想到查询快,有角标。
看到link:就要想到链表,就要想到增删快,既要想到add,get,remove +first,last的方法。
看到Hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashCode方法和equals方法。
看到Tree:及医药想到二叉树,既要想到排序,就要想到两个接口:compareble,comparetor.

通常这些常用的集合都是不同步的。

vector 和 hashtable 是同步的!!

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马