`
sunxboy
  • 浏览: 2878088 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java集合Collection十问

 
阅读更多

1. LinkedList 与 ArrayList的区别

LinkedList: 添加,删除元素比较快。

ArrayList: 添加,删除元素比较慢。通过索引查找比较快。

 

2.遍历集合时效率移除元素

一般会想到的方式是:

 

Iterator<Integer> itr = list.iterator();
while(itr.hasNext()) {
   // do something
   itr.remove();
}

 可是这种方式效率会更高

 

 

for(Integer i: list) {
  list.remove(i);
}

 

 

3.怎么将List转换成数组

最容易的是用Apache Commons lang的ArrayUtils工具类

 

int[] array = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));

当然JDK中有 List.toArray(),但是这样会将List转换成Integer数组

正确的方式应该是:

 

int[] array = new int[list.size()];
for(int i=0; i < list.size(); i++) {
  array[i] = list.get(i);
}

 

 

4.如何将int数组转换成List

 

最容易的仍然是用Apache Commons lang的ArrayUtils工具类

 

List list = Arrays.asList(ArrayUtils.toObject(array));

 在JDK中没有直接了当的方法,只能

 

 

int[] array = {1,2,3,4,5};
List<Integer> list = new ArrayList<Integer>();
for(int i: array) {
  list.add(i);
}

 

 

5.过滤数组比较好的方法

使用第三方工具包Guava,或者 Apache Commons Lang可以实现。使用afilter()方法(Collections2 in Guava或 CollectionUtils in Apache)

在Java8中使用Predicate可以实现,但是目前只能这样

 

Iterator<Integer> itr = list.iterator();
while(itr.hasNext()) {
   int i = itr.next();
   if (i > 5) { // filter all ints bigger than 5
      itr.remove();
   }
}

 在第三方工具类中使用这种方式

 

 

public interface Predicate<T> {
   boolean test(T o);
}
 
public static <T> void filter(Collection<T> collection, Predicate<T> predicate) {
    if ((collection != null) && (predicate != null)) {
       Iterator<T> itr = collection.iterator();
          while(itr.hasNext()) {
            T obj = itr.next();
            if (!predicate.test(obj)) {
               itr.remove();
            }
        }
    }
}

 然后这样用

 

 

filter(list, new Predicate<Integer>() {
    public boolean test(Integer i) { 
       return i <= 5; 
    }
});

 

 

 6.将List转换成Set的方式

 

Set<Integer> set = new HashSet<Integer>(list);

 这种方式在大多数情况下是可行的。它将会根据hashcode剔除重复元素。如果要根据自定义的comparator来判断是否是唯一,可以用

 

 

Set<Integer> set = new TreeSet<Integer>(aComparator);
set.addAll(list);

 

 

7.怎样从ArrayList中移除重复元素

 

ArrayList** list = ... // initial a list with duplicate elements
Set<Integer> set = new HashSet<Integer>(list);
list.clear();
list.addAll(set);

 

 

8.给集合排序

Collections.sort() 可排序List

PriorityQueue提供了有序的Queue,但是不能从中取任意的元素如PriorityQueue.get(4).

TreeSet也是如此,且元素是唯一的。与上一个一样不能取出任意元素

简而言之,Collections.sort()提供了一次性的排序方法。PriorityQueue 与TreeSet则维护着一个有序的集合。

 

9.创建一个新的集合

Collections.emptyList() vs new instance

(同样 emptyMap() 与 emptySet()

Collections.emptyList()返回的是不可变的空集合,任何调用者都会重用这一个实例(类似单例)

 

10.集合的Copy

常用的一种方式是:

ArrayList<Integer> dstList = new ArrayList<Integer>(srcList);

 另一种方式是这样

ArrayList<Integer> dstList = new ArrayList<Integer>(srcList.size());
Collections.copy(dstList, srcList);

 以上两种方式都是浅Copy, 

当srcList与disList大小不同时,Collections.copy会抛出IndexOutOfBoundsException异常,

Collections.copy的接收参数是List,  而ArrayList构造方法的接收参数是Collection,更为通用一些

 

分享到:
评论

相关推荐

    java泛型集合 java集合 集合 java Collection

    Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...

    Java集合排序及java集合类详解(Collection、List、Map、Set).doc

    Java集合排序及java集合类详解(Collection、List、Map、Set).doc

    java集合Collection总结

    Collection接口是Java集合框架的顶级接口,它是所有单列集合(比如List、Set)的父接口。在本总结中,我们将深入探讨Collection接口以及其主要子接口和实现类,通过实例来帮助理解它们的特性和使用场景。 1. **...

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    Java集合Collection、List、Set、Map使用详解

    本文将深入解析Java集合中的Collection、List、Set和Map,包括它们的使用方法、实现原理以及如何进行排序。 ### 集合框架概述 1.1.1 容器简介 容器是Java集合框架的基础,它是一个可以存储多个对象的容器,提供了...

    Tedu一段Java集合Collection

    根据给定的信息,本文将详细解析“Tedu一段Java集合Collection”的知识点,涵盖集合的基本概念、集合框架中的关键接口、`Collection`接口的核心方法、集合的遍历方式、泛型的应用以及集合与数组之间的相互转换。...

    Java集合Collection、List、Set、Map使用详解编程资料

    Java集合Collection、List、Set、Map使用详解

    Java集合Collection、List、Set、Map使用详解.pdf

    "Java集合Collection、List、Set、Map使用详解" Java集合是Java编程语言中最基本也是最重要的一部分。能够正确地使用集合类和理解集合的实现原理对于Java程序的开发具有无比的好处。本文将详细解释Java集合的实现...

    java集合框架之Collection实例解析

    Java集合框架是Java编程语言中一个非常重要的组成部分,它为数据存储和操作提供了丰富的接口和类。本篇文章将深入解析`Collection`接口及其主要实现类`List`和`Set`,帮助你理解并熟练运用这些核心概念。 首先,`...

    Java集合collection详解[整理].pdf

    Java集合collection详解[整理].pdf

    java集合思维导图

    Java集合框架是Java编程语言中的一个核心部分,它为数据存储和管理提供了高效且灵活的解决方案。本思维导图及总结旨在深入理解并掌握Java集合的相关概念和使用方法。 首先,我们来了解一下Java集合框架的基本构成。...

    Java集合Collection、List、Set、Map使用详解.doc

    Java 集合框架的主要组件包括 Collection、List、Set、Map 等。 1.1 容器简介 容器是指可以存储对象的对象。 Java 集合框架中有多种类型的容器,每种容器都有其特点和用途。常见的容器有 Collection、List、Set、...

    集合 Collection

    Java集合框架(Collection Framework)是Java编程语言中一个重要的组成部分,它为开发者提供了多种数据结构,以便更加高效、灵活地管理对象集合。Java集合框架主要包括三种类型的集合:List、Set和Map。此外,它还...

    "Java集合总结之Collection整体框架"用到的图片

    "Java集合总结之Collection整体框架"用到的图片

    java中collection集合

    java中collection集合

    java 集合

    在Java集合框架中,`Collection`是所有单值集合的父接口,它包含了`List`、`Set`等子接口。而`Iterable`接口是集合可迭代的标志,通过`iterator()`方法获取迭代器,遍历集合中的元素。`Map`接口则是用于存储键值对的...

    Java 集合排序及java 集合类详解

    Java 集合排序及java 集合类详解 Java 集合排序及java 集合类详解,Java...本教程详细解释了关于Java中的集合是如何实现的, 以及他们的实现原理等,涉及的部分内容:Collection , List ,Set , Map , 集合, 框架等。

Global site tag (gtag.js) - Google Analytics