黑马程序员-JavaCollection集合

 


---------------------- <ahref="http://www.itheima.com"target="blank">ASP.Net+Unity
开发</a>、<ahref="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

集合:

        collection的操作:

                    1.添加元素:add()

                    2.删除元素:remove();

                    3.清空集合:clear();

                    4.去两个集合的交集:retainAll(collection  e )

                    5.迭代器 Iterator :结合取出元素的方式

                                          Collection e = new Collection();

                                          Iterator it = e.iterator();

                                          while(it.hasnext())

                                               {

                                                      Objectobj = it.next();

                                               }

 

 

                                         for(Iteratorit = e.iterator();it.hasnext();)

                                         {

                                                Objectobj = it.next();

                                         }

 

       collection:

                     |--List:元素是有序的,元素可以重复。因为该集合体系有索引。

                            |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度快,但是增删速度慢,线程不同步。

                            |--LinkedList:底层的数据结构使用的是链表结构。特点:增删速度慢,但是查询速度慢

                            |--Vector:底层是数组数据结构。线程同步的,被ArrayList替代了。

 

                     |--set:元素是无序的,元素不可以重复

                            |--HashSet:底层数据结构是哈希表。线程是非同步的。

                                   HashSet是如何保证元素的唯一性的?

                                   是通过元素的两个方法,hashCode和equals来完成的。如果元素的hashcode值相同,才会判断equals是否为true。如果元素的hashcode值不同,不用判断是否相同。

 

                                   注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。

 

 

                            |--TreeSet:底层数据结构是树。

                                   可以对set集合中的元素进行排序。

                                   自定义对象需要实现comparable接口中的comparableTo方法。

              List:

                     特有的方法:凡是可以操作角标的方法都是该体系的特有方法.

 

                     增:add (index,element);

                            addAll(index,Collection);

 

                     删:remove (index);

 

                     改:set (index,element);

 

                     查: get(index);

                            subList(from,to);

                            还可以for循环遍历list;

                         通过indexof 获取对象位置

                            indexof(element);

                     list集合特有的迭代器:listIterator是Iterator的子接口

                            在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生concurrentModificationExceptiony异常。

                            所以,在迭代器时只能用迭代器的方法操作元素,可是Iterator方法有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口ListIterator

                            该接口只能通过List集合的ListInterator对象实现

                     LinkedList特有方法: 1.6 以后出现新的方法了

                            addFirst();头插法

                            addLast();尾插法

 

                            getFirst();获取头元素,如果集合中没有元素会出现NoSuchElementException

                            getLst();获取尾元素,如果集合中没有元素会出现NoSuchElementException

 

                            removeFirst();获取后删除,如果集合中没有元素会出现NoSuchElementException

                            removeLast();

 

 

                     使用Linklist 模拟栈和队列结构。

 

                     TreeSet:可以对set集合中的元素进行排序,底层数据结构是二叉树,保证唯一性的依据是compareTo方法return 的值。

 

              TreeSet排序的第一种方式是:让元素自身具备比较性,元素需要实现comparable接口,覆盖compareTo的方法。这种方式也成为元素的自然顺序也叫做默认排序。

              TreeSet排序的第二种方式是:当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时候需要让集合自身具备比较性。-----定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

              当两种排序都存在时,以比较器为主。

 

               如何定义一个比较器:定义一个类,实现comparator接口,覆盖compare方法。

 

               例题:按照字符串长度排序:

               class StrLenComparator implements Comparator

               {

                    publicint compare(Object o1,Object o2)

                    {

                           Strings1 = (String ) o1;

                           Strings2 = (String ) o2;

                            int num = newInteger(s1.length()).compareTo(new Integer(s2.length()));

                            if(num==0) return s1.compareTo(s2);//次要条件

                           returnnum;

                    }

               }

 

 

---------------------- <ahref="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<ahref="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://www.itheima.com"target="blank">www.itheima.com</a>

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值