1.数组转ArrayList
List<String> list = Arrays.asList(arr);
Arrays.asList会返回一个ArrayList对象,但是该类是Arrays类中一个私有静态内部类,具有set get contains等方法,不具有add remove方法(size固定)
应采用如下方法
ArrayList<String>list = new ArrayList<String>(Arrays.asList(arr));
更加高效的方法:
ArrayList<String> arrayList = new ArrayList<String>(arr.length);
Collections.addAll(arrayList, arr);
2.数组是否包含特定值
高效代码:
for(String s: arr){
if(s.equals(targetValue))
return true;
}
return false;
3.在迭代中移除List中元素
不能采用索引方式(list.remove(i))移除元素,因为size大小会变,解决方法使用迭代器(iterator),代码如下:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c",
"d"));
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String s = iter.next();
if (s.equals("a")) {
iter.remove();
}
}
next方法必须在remove方法前调用,否则会报
ConcurrentModificationException 异常。
4.Hashtable 与 HashMap(哈希表)
a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的。
b)Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,所以会更快。
c)Hashtable 不允许有个空的 key,但是 HashMap 允许出现一个 null key。
5. ArrayList 与 LinkedList
ArrayList 适用于多次随机访问操作,内部实现机制来讲ArrayList是使用Object的数组形式来存储的。
LinkedList (双向链表)适用于场景中有很多add、remove操作,只用少量的随机访问操作
6. Java中数组List数据结构
7.Map遍历
// System.out.println("第二种:通过Map.entrySet使用iterator遍历key和value:"); Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Integer, String> entry = it.next(); System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } // 推荐,尤其是容量大时 System.out.println("第三种:通过Map.entrySet遍历key和value"); for (Map.Entry<Integer, String> entry : map.entrySet()) { //Map.entry<Integer,String> 映射项(键-值对) 有几个方法:用上面的名字entry //entry.getKey() ;entry.getValue(); entry.setValue(); //map.entrySet() 返回此映射中包含的映射关系的 Set视图。 System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); }
Collection
- 是一个泛型的接口
- 继承了超级接口Iterable
- 每个Collection的对象包含了一组对象
- 所有的实现类都有两个构造方法,一个是无参构造方法,第二个是用另外一个Collection对象作为构造方法的参数
- 遍历Collection使用Iterator迭代器实现
- retainAll(collection),AddAll(),removeAll(c)分别对应了集合的交并差运算
- 没有具体的直接实现,但提供了更具体的子接口,如Set、List等
List
- 是一个接口,继承了接口Collection
- List是有序的Collection,能够精确控制插入、获取的位置
- 和Set接口的最大区别是,List允许重复值,Set不能
- 它的直接实现类有ArrayList,LinkedList,Vector等
- List有自己的迭代器ListIterator,可以通过这个迭代器进行逆序的迭代,以及用迭代器设置元素的值
ArrayList
- ArrayList实现了Collection接口
- ArrayList是一个顺序表。大小可变。
- ArrayList相比LinkedList在查找和修改元素上比较快,但是在添加和删除上比LinkedList慢
- ArrayList相比Vector是线程不安全的
LinkedList
- LinkedList泛型接口
- 链表
- 由于实现了Deque接口,所以它还是一个双端队列