java入门->基础知识6 集合

集合

    一:介绍

        1)ArrayList:是list的子类,允许存放重复的元素,因此有序,集合中元素被访问的顺序取决于集合的类型;

        2)LinkedList:是一种可以在任何位置进行高效的插入和删除操作的有序序列;

        3)HashSet:是set接口的一个子类,特点:里面不能存放重复元素,而且采用散列的存储方式,没有顺序,元素插入的顺                序和输出的顺序不一致;

    二:遍历集合

         List<String> list=new ArrayList<String>();

         list.add("aaa");

         list.add("bbb");

         list.add("ccc");

         1)增强for循环遍历:

            for (String str: list) {

                system.out.println(str);

            };

         2)for循环;

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

                system.out.println(str);

             } ;

         3)集合类的通用遍历方式:迭代器;迭代器是Itertor接口,

              hasNext():判断集合是否还有其它的元素可以遍历;

              next():返回迭代的下一个元素;

              remove():删除通过next()迭代出的元素;

              Iterator it=list.iterator();

              while(it.hasNext()) {

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

              }

    补充:

        1)Iterator():包含了hashNext(),next(),remove()三种方法;

        2)它的子接口LinkedIterator在它的基础上增加了add(),precious(),hasPrevious()三种方法;

             如果是先Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会再遍历到,无序集合实现的               都是这个接口;eg:HashSet,HashMap。

             那些有序的集合实现的一般都是LinkedIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个                 元素,又可以通过previous访问前一个元素;eg:ArrayList。

  是否有序是否允许元素重复
Collection 
List 

set

AbstractSet

 HashSet
 TreeSet是(用二叉排序)
MapAbstractMapkey唯一,value可以重复
 HashMapkey唯一,value可以重复
 TreeMap是(二叉排序树)

key唯一,value可以重复

    三:集合常见面试题

        1)ArrayList和Vector有什么区别? HashMap和HashTable有什么区别?

             Vector和HashTable是线程同步。性能上LArrayList和HashMap分别比Vector和HashTable更好。

        2)大致讲解java集合的体质结构?

             List,set和Map是这个集合体系中最主要的三个接口;

             其中LIst和Set继承自Collection接口;

            Set不允许元素重复,HashSet和TreeSet是两个主要的实现类;

            List有序且允许元素重复,ArrayList,LinkedList和Vector是三个主要的实现类;

            Map也属于集合系统,但和Collection接口不同,Map是key对value的映射集合,其中key列就是集合,key不能重复,但              是value可以重复,HashMap,TreeMap和HashTable是三个主要的实现类;

            SortedSet和SortedMap接口对元素按指定规则排序,SortMap是对key列进行排序;

        3)Comparable和Comparator区别?

              调用java,Util.Collections.sort(List list)方法来进行排序的时候,List内的Object都是必须实现Comparable接口;

              java.Util.Collections.Sort(List list,Comparator c)可以临时声明一个Commparator来实现排序;

        4)ArrayList和LinkedList的区别?Collection与Collections的区别?

             ArrayList:内部实质上就是一个数组适合查询元素,但是增删元素慢;

             LinkedList:内部是链表,首位增删快,查询慢;

             Collection是集合的接口;Collections是集合的工具类;

        5)HashCode重写?

             作为HashMap的key的类,hashCode方法与equal方法的重写要注意,因为这两个方法的结果直接影响散列表的性能;

             这两个方法时在Object中定义的,API文档中对应两个方法的重写做了说明:

             1:每当我们重写了一个类的equals方法时,就应当连同重写hashCode;

             2:hashCode返回的数字应该是稳定的,意思是说当参与equals比较的属性的值没有发生改变的前提下,多次调用                             hashCode返回的数字应当相同;

             3:hashCode的值应当与equals的结果相对应:

                   两个对象若equals比较为true,hashCode的值应当相等;

                   两个对象若equals比较结果为false,hashCode值最好不同,若依然相同,那么作为key存入hashMap中时会产生链                       表情况,影响hashMap查询性能;

        6)装载因子及hashMap优化

             Capacity:容量,hash表里bucket(桶)的数量,也就是散列数组大小;

             Initial capacity:初始容量,创建hash表时,初始bucket的数量,默认构建容量是16,也可以使用特定容量;

             Size:大小,当前散列表中存储数据的数量;

             Load factor:加载因子,默认值0.75(75%),当向散列表增加数据时,如果size/capacity的值大于load factor 则发生扩容               并且重新散列(rehash);

             性能优化:加载因子较小时,散列查找性能性能会提高,同时也浪费了散列桶空间容量,0.75是性能和空间相对平衡结                 果,在创建散列表时,指定合理容量,减少rehash提高性能;

    四:集合方法

        int size:返回当前集合的元素总数;

        void clear:用于清空当前集合;

        boolean isEmpty():判断当前集合中是否不包含任何元素;

        add():向集合中添加新元素;

        boolean contains(Object o):判断给定的元素是否包含在集合中;

        boolean addAll:传入一个集合将该集合中的所有元素添加到当前集合;

        boolean containsAll():判断当前集合是否包含给定集合中的所有元素;

        E get(int index):获取集合中指定的下标元素,从0开始;

        E set(int index,E elment):将给定的元素存入给定位置,原位置元素返回;

        void add(int index,E element):给定的插入到指定位置,原位置及后续元素都顺序向后移;

        E remove(int index):删除给定位置的元素,并将被删除的元素返回;

        subList:获取子list,会影响原list;

        List的toArray:将集合转换为数组;

        Arrays类中的asList:数组转换为对应的list集合;

        Collections.sort:方法实现排序(给定的集合元素进行排序);

        Sort方法进行排序,前提得实现Comparable接口,重写ComparTo抽象方法(元素对象排序);

        Queue()

        队列:特殊的线性表  ,LinkedList实现接口。只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素;

        boolean offer(E e):将一个对象添加到队尾,成功则为true;

        E poll():从队首删除并返回一个元素;

        E peek():返回队首的元素(不删除);

        Deque

        是Queue的子接口,两端分别可以入队(offer)和出对(poll),先进后出; 如果限制一端出队入队实现栈(stack)的数据接口;

        栈:入栈push,出栈pop;

     五:Map接口  存储 key-value

        实现类:hash表实现的HashMap

       V put(K key,V value):向Map中存放元素;

       V get(Object key):从Map中获取元素;

       boolean containskey(Object key):判断某个key是否在Map中;

       Set<K>KeySet():遍历所有的key;

        entrySet():遍历所有的键值对方法;      LinkedHashMap实现有序;

        Collection<V> value():遍历所有value;

       

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值