Java面试准备(Java集合)

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));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 2,095评论 0 8
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,562评论 18 399
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,483评论 0 3
  • 很开心地想写一下今天从日月光一路逛到大悦城的吃后感【其实没有吃很多】人生中第一次用远足填补的生日,从此不再庆祝,只...
    淇奥Syrinx阅读 270评论 1 2
  • 做女人最可贵的,是“莫欺少年穷”。如果不嫌弃男人年轻时候的穷苦,愿陪他走过人生最艰苦的岁月,这样的女人千万不能错过...
    联盟者工作室阅读 353评论 0 0