JAVA基础之集合(下)

集合类:用于存储对象,数组类是用于存储基本类型。

特点:1.用于存储对象的容器。

     2.集合的长度是可变的。

     3.集合中不可以存储基本数据类型值。

集合框架(重点)

 


Collection:(顶层接口)collection是接口,所以要创建对象必须依靠实现它的子类,一般是用ArrayList;

Collection方法:1、添加:

   boolean add(Object obj);

   boolean addAll(Collection coll);

   2、删除:

   boolean remove(Object obj);

   boolean removeAll(Collection coll);

   void clear();

   3、判断:

   booleancontains(Object obj);

   boolean containsAll(Collection coll);

   boolean isEmpty();判断集合中是否有元素。

 4、获取:

   int size();

   Iterator iterator();

   取出元素的方式:迭代器。

   该对象必须依赖于具体容器,因为每一个容器的数据结构都不同,所以该迭代器对象是在容器中进行内部实现的,也就是iterator方法在每个容器中的实现方式是不同的。

   对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法。

   Iterator接口就是对所有的Collection容器进行元素取出的公共接口。

   5、其他:

   boolean retainAll(Collection coll);取交集

   Object toArray();将集合转成数组

 //比较高效的遍历程序,外国人喜欢用

//for循环结束,Iterator变量内存释放,更高效

for(Iterator it2 =coll.iterator();it2.hasNext();){

 System.out.println(it2.next());


ListSet

List有序(存入和取出的顺序一致),元素都有索引(角标),允许重复元素。可以完成增删改查,跟collection一样。它也是接口,一般也是用子类ArrayList

              //list特有的取出元素的方式之一

            for(int x = 0; x < list.size(); x++){

             System.out.println("get:" + list.get(x);}

易错点:在迭代器过程中,不要使用集合操作元素,容易出现异常:java.util.ConcurrentModificationException

可以使用Iterator接口的子接口ListIterator来完成在迭代中对元素进行更多的操作。

只要将Iterator it=list.iterator();改成Iteratorit=list.ListIterator();就可以,它可以实现在迭代过程中完成对元素的增删改查。注意,只有List集合具备这个功能,其他集合不具备ListIterator

List:有序;有角标;元素可以重复;

      |--Vector:内部是数组数据结构,是同步的。增删,查询都很慢。

      |--ArrayList:内部是数组数据结构,是不同步的,替代了Vector。替代了Vector,查询的速度快。

      |--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。

          |-JDK1.6之后的新方法:offerFirst,offerLast,getFirst,getLast,(get是获取但不移除)peekFirst,peekLast,peek是获取并移除)removeFirst,removrLast(获取并移除)

Set:元素不能重复,无序。

 |--HashSet:内部数据结构是哈希表,是不同步的。先判断哈希值,再用equals判断内容,实际中经常覆盖或改写equals中的比较内容;要想让无序变有序,使用LinkHashSet

 |--TreeSet:可以对Set集合中的元素进行排序,是不同步的,它的底层是二叉树结构,TreeSet对元素进行排序的方式有两种:

1   让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖compareTo方法。

2   让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法,将该类对象作为参数传递给TreeSet集合的构造函数。(当对象中不具备自然对象时用此方法)


Map:一次添加一对元素,Collection一次添加一个元素。Map也称为双列集合,Collection集合称为单列集合。map集合中必须保证键的唯一性。

常用方法:

   1、添加

   value put(key,value):返回前一个和key关联的值,如果没有返回null

   2、删除

   void clear():清空map集合。

   value remove(Object key):根据指定的key删除这个键值对。

   3、判断

   boolean containsKey(key);

    boolean containsValue(value);

    boolean isEmpty();

 4、获取

   value get(key):通过键获取值,如果没有该键返回null; 当然可以通过返回null,来判断是否包含指定键。

   int size():获取键值对个数。

Map集合没有Iterator但是可以将map集合转成collection集合,然后进行迭代打印输出;

获取Map集合元素并打印方式一:KeySet

//原理,通过keySet方法获取map中所有的键所在的set集合,在通过set的迭代器获取到每一个键。

 //再对每一个键通过map集合的get方法获取其对应的值即可。

        Set<Integer> keySet = map.keySet();

      Iterator<Integer> it = keySet.iterator();

            while(it.hasNext()){

                 Integer key = it.next();

                 String value = map.get(key);

                 System.out.println(key +":" + value);

           }

 获取Map集合元素并打印方式二:EntrySet

 /*

        通过Map转成Set就可以迭代。

          找到了另一个方法,entrySet

           该方法将键和值的映射关系作为对象存储到了Set集合中,而这个映射关系的类型就是Map.Entry类型

          */

        Set<Map.Entry<Integer,String>> entrySet = map.entrySet();

           Iterator<Map.Entry<Integer,String>> it =entrySet.iterator();

            while(it.hasNext()){

                Map.Entry<Integer,String> me = it.next();

                Integer key = me.getKey();

                 String value = me.getValue();

              System. out.println(key +":" + value);

           }

     }

获取Map集合元素并打印方式三:

public static voidmethod(Map<Integer,String> map){

          map.put(8, "王五");

           map.put(2, "赵六");

          map.put(7, "小强");

         map.put(6, "旺财");

           Collection<String> values = map.values();

           Iterator<String> it = values.iterator();

.            while(it.hasNext()){

                 System.out.println(it.next());

           }

   }

 

  Map常用的子类:


         |--Hashtable:内部结构是哈希表,是同步的。不允许null作为键,null作为值。


         |--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。


         |--HashMap:内部结构式哈希表,不是同步的。允许null作为键,null作为值。


         |--TreeMap:内部结构式二叉树,不是同步的。可以对Map结合中的键进行排序。


 hashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值