Java中list.map.set基本概念,方法比较和遍历方式

来源:互联网 发布:数据库权限管理 编辑:程序博客网 时间:2024/06/06 01:17

1.集合的基本介绍:

Collection

    --List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。

           --ArrayList / LinkedList / Vector

    --Set : 不能含有重复的元素

           --HashSet / TreeSet

 Map:键值对

    --HashMap

    --HashTable

    --TreeMap

 

集合的基本的功能和方法

Collection接口的方法:

boolean add(Object o):向集合中加入一个对象的引用  

void clear():删除集合中所有的对象,即不再持有这些对象的引用  

boolean isEmpty() :判断集合是否为空  

boolean contains(Object o) : 判断集合中是否持有特定对象的引用  

Iterartor iterator() :返回一个Iterator对象,可以用来遍历集合中的元素  

boolean remove(Object o) :从集合中删除一个对象的引用  

int size()  :返回集合中元素的数目  

 

Iterator接口声明了如下方法:

hasNext():判断集合中元素是否遍历完毕,如果没有,就返回true  

next() :返回下一个元素  

remove():从集合中删除上一个有next()方法返回的元素。

Object[] toArray():返回一个数组,该数组中包括集合中的所有元素 </span> 

关于:Iterator() 和toArray() 方法都用于集合的所有的元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组。

 

List的基本介绍

Java中的List就是一种集合对象,将所有的对象集中到一起存储。List里面可以放任意的java对象,也可以直接放值。

List经常用在对一组对象的存储和操作上,比如一组学生信息,一组帐号信息等等。

List可以理解为动态数组,传统数组必须定义好数组的个数才可以使用,而容器对象无须定义好数组下标总数。

List的功能和方法

list的几个常用方法:

添加元素:list.add(e);

返回是否删除:list.remove(e);

取出元素:list.get(index);

清空集合:list.clear();

判断list是否为空:list.isEmpty()

判断数组中包含/不包含某个字符串:
String[] colors = {"blue","red","green","yellow","orange","black"};int index=Arrays.binarySearch(colors, "orange");如果存在,index为数组下标,不存在-1。

如果想看更多的关于list的操作可以去下面的博客看,本人觉得整理的比较全面。而且配图也更好理解。

http://www.cnblogs.com/epeter/p/5648026.html

List的比较

ArrayList和LinkedList的比较

ArrayList:由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历 ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。

LinkedList:在实现中采用链表数据结构,对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

 

遍历list的方法

list的遍历:

public class ArrayListDemo {

    publicstatic void main(String args[]){

       List<String> list = new ArrayList<String>();

       list.add("1a");

       list.add("2b");

 

        * //方法1  在比较早的框架中,jsp写遍历

       Iterator it1 = list.iterator();

       while(it1.hasNext()){

           System.out.println(it1.next());

       }

 

        * //方法2

       for(Iterator it2 = list.iterator();it2.hasNext();){

            System.out.println(it2.next());

       }

 

  *//方法3  list 集合遍历 foreach    速度最快 用的最多

   for(String data:list){

           String value=data;

       }

 

*//  方法4  list集合遍历  for

   for(i=0;i<list.size();i++){

           String value=list.get(i);

       }

 

方法3的相关解释:

foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。

foreach的语句格式:

for(元素类型t 元素变量x : 遍历对象obj){

     引用了x的java语句;

}

Map的基本介绍 

Map(映射)

map的简单介绍:

Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

Map集合中的键对象不允许重复,因此,任意两个键对象通过equals()方法比较的结果都是false.,但是可以将任意多个键独享映射到同一个值对象上。

 

Map的功能和方法

Map的一般用法

* . map.put("key","value");向map中放值

* . map.get("key")从map中取值

*.map.remove(Objectkey): 删除与KEY相关的元素  

*.可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。

 

更多具体的操作:

  void clear()

  从此映射中移除所有映射关系(可选操作)。

  boolean containsKey(Object key)

  如果此映射包含指定键的映射关系,则返回 true。

  boolean containsValue(Object value)

  如果此映射将一个或多个键映射到指定值,则返回 true。

  Set<Map.Entry<K,V>>entrySet()

  返回此映射中包含的映射关系的 Set 视图。

  boolean equals(Object o)

  比较指定的对象与此映射是否相等。

  V get(Object key)

  返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

  int hashCode()

  返回此映射的哈希码值。

  boolean isEmpty()

  如果此映射未包含键-值映射关系,则返回 true。

  Set<K> keySet()

  返回此映射中包含的键的 Set 视图。

  V put(K key, V value)

  将指定的值与此映射中的指定键关联(可选操作)。

  void putAll(Map<? extends K,?extends V> m)

  从指定映射中将所有映射关系复制到此映射中(可选操作)。

  V remove(Object key)

  如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

  int size()

  返回此映射中的键-值映射关系数。

  Collection<V> values()

  返回此映射中包含的值的 Collection 视图。

 

Map的比较

Java类中的不同的map方法:

 标准的Java类库中包含了如下几种Map:HashMap, TreeMap, LinkedHashMap,WeakHashMap, IdentityHashMap。

 

hashmap和TreeMap的基本介绍

HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显着提高性能。HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都 能产生散列码,因为hashCode()是定义在基类Object中的方法。

TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在 于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。

 

hashmap和hashtable的相同点和不同点:

HashMap:

*HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。

* HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。

* HashMap实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。

Hashtable:

* Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。

* Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。

* Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆。

 

总结两者不同:

HashMap几乎可以等价于Hashtable,但是HashMap可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。

HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。现在基本上都用ConcurrentHashMap。

 

遍历map方法     

遍历map的3种方法               

public static void main(String[] args) {

 

 Map<String, String> map = new HashMap<String, String>();

 map.put("1", "value1");

 map.put("2", "value2");

 map.put("3", "value3");

 

  //效率不高("通过Map.keySet遍历key和value:");

  for(String key : map.keySet()) {

  System.out.println("key= "+ key + " and value= " +map.get(key));

  }

 

  //效率高,比较常用("通过Map.entrySet遍历key和value");

  for(Map.Entry<String, String> entry : map.entrySet()) {

  System.out.println("key= " + entry.getKey() + " andvalue= " + entry.getValue());

  }

 

  // ("通过Map.entrySet使用iterator遍历key和value:");

 Iterator<Map.Entry<String, String>> it =map.entrySet().iterator();

  while(it.hasNext()) {

  Map.Entry<String, String> entry = it.next();

  System.out.println("key= " + entry.getKey() + " andvalue= " + entry.getValue());

  }

 

Set基本介绍

Set(集合)

Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。

Set接口主要实现了两个实现类:

*HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快

*TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序

Set的功能方法:

set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。

Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

Set的比较

HashSet:为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。

TreeSet: 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

 

原创粉丝点击