集合类collection类详解和set map简介
来源:互联网 发布:js 浮点数比较 编辑:程序博客网 时间:2024/05/14 15:09
集合
List、Map、Set的常用函数;
将一个ArrayList转化为指定类型的数组;
遍历List、Map、Set(3种方法);
边遍历,边删除List、Set的元素;
遍历集合举例:
package day4demo;
import java.util.*;
publicclass day4demo6 {
/**
* @param args
*/
publicstaticvoid ergodiclist1(List<String> list)
{
Object[] obj=list.toArray();
for(int i=0;i<obj.length;i++)
{
System.out.println(obj[i]);
}
}
publicstaticvoid ergodiclist2(List<String> list)
{
for(String it:list)
{
System.out.println(it);
}
}
publicstaticvoid ergodiclist3(List<String> list)
{
Iterator<String> it=list.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
publicstaticvoid ergodiclist4(List<String> list)
{
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
}
publicstaticvoid ergodiclist5(List<String> list)
{
for(int i=0;i<list.size();i++){
if(list.get(i).equals("bobge")){
list.remove(i);
}
}
System.out.println(list);
}
publicstaticvoid main(String[] args) {
//TODO Auto-generated method stub
List<String> list=new ArrayList<String>();
list.add("bobge");
list.add("wangchao");
list.add("zhangyan");
ergodiclist1(list);
ergodiclist2(list);
ergodiclist3(list);
ergodiclist4(list);
ergodiclist5(list);
}
}
通过该题来总结一下集合的相关知识:
集合类的说明:
Collection(iterator方法遍历)
-List (add) //将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
-LinkedList (get remove insert等方法)
-ArrayList (size,isEmpty,get,set等方法,时间复杂度都是常数,但是add添加N个元素方法的时间复杂度是O(N))
-Vector
-Stack
-Set //不能有重复值
-HashSet
-TreeSet
Map
-HashMap
-HashTable
-WeakHashMap
List接口:(涉及到堆栈,队列等操作)
从上面的结构图可以看出实现List接口的常用类有LinkedList,ArrayList,Vector和Stack.
List除了具有从collection继承下来的iterator方法外,自身还提供了一个listiterator方法,返回了一个listiterator接口,与collection继承下来的iterator方法相比,多了一些add()之类的方法,允许添加,删除和设定元素,还允许向前向后遍历。
LinkedList(需要快速插入,删除元素):允许null键null值,此外LinkedList还提供额外的get,remove,insert方法。这些方法可以使LinkedList用作堆栈,队列,或者双向队列。(LinkedList没有同步方法,如果多个线程同时访问一个LinkedList,则需要在创建list的时候构建一个同步的list)
List list = Collections.synchronizedList(new LinkedList(...));
ArrayList(需要快速随机访问元素):允许所有的元素包括null。ArrayList和LinkedList一样没有同步方法,它实现了可改变大小的数组(因为每个ArrayList实例都有一个容量(Capacity),用于存储数组元素的大小。随着增加元素而自动增加,但是它没有定义增加的算法,所以当需要插入大量的数据时可以用ensureCapacity(size+1)方法来增加ArrayList的容量用来提高插入效率。
publicvoid add(int index, E element) {
if (index >size || index < 0)
thrownew IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
ensureCapacity(size+1); // Increments modCount!!
System.arraycopy(elementData, index,elementData, index + 1,
size - index);
elementData[index] = element;
size++;
}
Vector:非常类似于ArrayList,也实现了可变大小的数组。但是Vector是同步的,由它创建的iterator虽然也是继承了collection接口,但是由于它是同步的,当一个线程改变了Vector的状态(如删除或者添加一些元素),这时候iterator方法会抛出ConcurrentModificationException异常,所以使用Vector的iterator方法必须捕获该异常。
Stack类:继承自Vector,实现了先进后出的堆栈,提供了基本的POP和PUSH方法,还有peek方法得到栈顶元素,empty检测栈低是否为空,search方法搜索元素所在位置。
Set接口:
由结构图可以知道实现set接口的常用类用hashset和treeset。Set的构造函数有一个很明显的约束条件就是传入collection的参数不能包含重复的元素。因此在对Set元素进行操作时要小心,如果出现obj1.equals(obj2)可能会出现问题。
Map接口:
Map接口和set,list接口不同,它不是继承自collection。它提供key到value的映射,map的内容可以说是一组key集合或者一组value集合或者一组key-value的映射。因为一个key只能映射到一个value。而一个map不能有相同的key。它提供三种集合的视图:
注意:尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
- 集合类collection类详解和set map简介
- java集合类 collection set list map详解
- 集合类:Collection--List, Set, Map
- java集合类,collection,list,set,map
- Java集合排序及java集合类详解--(Collection, List, Set, Map)
- java 集合架构--[Collection] [List] [Set] [Map] [集合工具类]
- java 集合架构--[Collection] [List] [Set] [Map] [集合工具类]
- java 集合架构--[Collection] [List] [Set] [Map] [集合工具类]
- Collection集合类和Map集合类
- Java--集合类Collection--List和Set
- Collection Map 集合类
- 集合类的使用? collection set map list
- 集合collection的实现类List,set以及map
- 集合类(Collection) List/Set/Map... 的区别和联系
- Java基本概念:集合类(Collection)List/Set/Map... 的区别和联系
- Java基本概念:集合类(Collection)List/Set/Map的区别和联系
- 集合类(Collection) List/Set/Map... 的区别和联系
- Java基本概念:集合类(Collection)List/Set/Map... 的区别和联系
- 设置最小heap内存,保证该运行程序有足够的内存
- iOS中Sqlite的简单使用方法
- 关于android开发中涉及到的java知识:面向对象(八)
- 面试题目
- Android SDK Manager下载慢的解决方法
- 集合类collection类详解和set map简介
- 10.多线程学习--处理线程组内的不受控制异常
- if [[ x$1 = x ]] shell判断函数的参数是否为空
- UITableView优化
- 云计算设计模式(一)——缓存预留模式
- FGGREGERGER
- Linux系统相关命令
- log4j配置(XML配置方式)
- Hibernite 注解一对多,子元素排序。