Java面试准备(Java集合)

作者: 蒹葭流 | 来源:发表于2017-03-07 16:07 被阅读67次

ArrayList、LinkedList、Vector区别

  • ArrayList 是一个可改变大小的数组,其大小将会动态地增长。
  • LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义。
    LinkedList 还实现了 Queue 接口,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等。
  • Vector 和ArrayList类似,但属于强同步类,开销会比较大。Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.

Queue队列

其接口定义为:

public interface Queue<E> extends Collection<E> {
    //获取但不移除队列头,
    E element();
    //添加元素到队尾
    boolean offer(E o);
    //获取但不移除队列头的元素 
    E peek();
    //移除对头元素
    E poll();
    //移除对头元素
    E remove();
}
  • Queue主要特征在于FIFO,的实现一般并不容许插入null,只有LinkedList是一个例外,它容许插入null。
  • 当Queue的元素已经到达限制数目时,add会抛出 IllegalStateException异常,offer会返回false。
  • 当Queue为空时,remove抛出NoSuchElementException异常,而poll返回null。
  • element和peek返回但不删除Queue中的头元素,它们的区别类似remove与poll。
BlockingQueue与CountDownLatch
  • BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量:

当容量满时,往BlockingQueue中添加数据时会造成阻塞。
当容量为空时,取元素操作会阻塞。

其两个常用子类是ArrayBlockingQueue和LinkedBlockingQueue。

  • CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。主要方法:
public CountDownLatch(count); 
public void countDown(); 
public void await() ;

构造方法指定了计数的次数。countDown方法,当前线程调用此方法则计数减一。await方法,调用该方法会一直阻塞当前线程,直到计时器的值为0。

Map

常用的Map

  • Hashtable:底层是哈希表数据结构,不可以存入null健null值,该集合是线程同步的 。
  • TreeMap: 底层是二叉树数据结构,可以用于给map集合中的健进行排序 该集合线程不同步。
  • HashMap底层是哈希表数据结构,允许使用null健null值,该集合是不同步.当添加元素,如果出现添加相同的健时,后添加的值会覆盖原有健对应的值。

ConcurrentHashMap

  • 是线程安全并且高效的HashMap,在并发编程中经常可见它的使用.
  • Hashtable线程安全,但是效率低下

Map的遍历方法之一

HashMap<String,String> source = new HashMap<>();
for (Map.Entry<String,String> entry: source.entrySet()){
      System.out.println(entry.getKey());
      System.out.println(entry.getValue());
}

Map的遍历方法之二

Collection<String> values =source.values();
      for (Iterator<String> it = values.iterator(); it.hasNext();) {
          String s = it.next();
          System.out.println(s);
      }

Map的遍历方法之三

//需要Java8以上的版本
source.forEach((k,v)->System.out.println( k + " : " + v));

Collections、Collection与Arrays

  • Collection是一个集合接口,是List、Set、Queue接口。
  • Collections包含有各种有关集合操作的静态多态方法,此类不能实例化,就像一个工具类。如Collections的排序方法sort。
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(5);
list.add(3);
list.add(2);
//默认升序,输出1 2 2 3 5
Collections.sort(list);
//降序,输出5 3 2 2 1
 Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
  • Arrays类能方便地操作数组,它提供的所有方法都是静态的,主要方法:

给数组赋值:通过fill方法。
对数组排序:通过sort方法,按升序,有些重载方法可以传入Comparator接口。
比较数组:通过equals方法比较数组中元素值是否相等。
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。

int[] ints=new int[5];
//数组全部赋值为6
Arrays.fill(ints,6);
//数组第2个和第4个赋值为7,未赋值的未0
Arrays.fill(ints,1,4,7);

//升序
Arrays.sort(ints);
//对第1个到第4个进行升序
Arrays.sort(ints,1,4);

int[] ints1=ints.clone();
Arrays.equals(ints,ints1); //true
int[] ints2=new int[5];
Arrays.fill(ints2,8);
Arrays.equals(ints,ints2);//true

//使用二分搜索算法查找指定元素所在的下标(必须是排序好的,否则结果不正确)
Arrays.sort(ints);
//会返回第一个找到的下标
System.out.println(Arrays.binarySearch(ints,6));

相关文章

  • Java面试题目录

    垃圾回收 面试题-Java基础-垃圾回收 java垃圾回收 集合 40个Java集合面试问题和答案 Java集合框...

  • Java面试题目录

    垃圾回收 面试题-Java基础-垃圾回收 java垃圾回收 集合 40个Java集合面试问题和答案 Java集合框...

  • Java面试准备(Java集合)

    ArrayList、LinkedList、Vector区别 ArrayList 是一个可改变大小的数组,其大小将会...

  • Java基础面试总结

    【面试汇总】Java面试题-1Java面试题-2 【集合】Java集合及concurrent并发包总结(转)Jav...

  • Java基础汇总

    [ 面试题 ] java基础 面试 | java基础 最近5年133个Java面试问题列表 40个Java集合面试...

  • Nothing seek,Nothing find

    美图欣赏 Java、Android知识点汇集 Java集合类 ** Java集合相关的博客** java面试相关 ...

  • 面试总结-Java高级篇

    Java面试总结 1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 ...

  • 【集合框架】

    集合框架(怎么实现、适用场景) hash相关 Java集合框架 Java集合框架综述Java集合框架面试问题集锦 ...

  • 那些年我们追过的Java面试之集合类、异常处理

    标签:Java面试、集合类、异常处理 2017/05/09 09:36 三.Java集合类 10.Java集合类框...

  • Collection

    参考地址:Java集合常见面试题集锦Java集合必会14问(精选面试题整理) Java中Collection和Co...

网友评论

    本文标题:Java面试准备(Java集合)

    本文链接:https://www.haomeiwen.com/subject/ysbmgttx.html