黑马程序员进一步认识单列集合与双列集合接口下的常用实现类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

允许存储重复元素而且有序list集合,常用两个实现类是ArrayList和LinkedList.

 首先ArrayList是一个可变数组大小的列表,允许null在内的所有元素,构造一个初始容量为10的空列表,也可以提定初始容量initialCapacity,ArrayList最大的特点内部是数组结构,一看到数组,我们会立刻想到角标索引,所以在操作元素时,可以根据索引准确判断元素的位置,查询快。其实ArrayList是包装了一个数组对象,可以调用get() set() 操作元素,查询快,但在增加元素,从0角标开始增加,元素就会往后挪动,删除指定元素时,要从0角标一个个判断,增删动作快。

而LinkedList是链表式结构,增删快,查询慢。LinkedList 类还为在列表的开头及结尾 getremoveinsert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。

ArrayList和LinkedList都是不同步的,而且此两类在iterator 和 listIterator 方法返回的迭代器是快速失败的,在迭代集合的过程中,除非迭代器自身的add和remove从结构上对列表进行修改,否则会抛出ConcurrentModificationException。

不允许存储重复元素且元序的set集合,常用的两个实现类是HashSet 和 TreeSet 。list和set都属于单列集合,HashSet内部数据结构是哈希表结构的,不能保证迭代顺序。set集合是不允许重复元素的,要保证元素的唯一,首先要通过 hashcode和equals方法来完成,如果对象的hashcod值不同,则不用判断equals,直接存储到哈希表中,如果对象的hashcode值相同,就再次判断equals方法是否为ture.如果为true,视为相同元素,不存,如果false,视为不同元素,就进行存储。一般情况下,定义类会产生很多对象,如人,学生,书,通常都要判断equals方法。

TreeSet内部是二叉树数据结构的,可以对set集合中的元素进行排序,判断元素是否唯一的方式就是根据比较方法的返回值结果是否为0。可分为两种方式,第一种是让元素自身具备比较功能,第二种就是让集合具有比较功能,定义一个类实现Comparator接口,覆盖compare()方法,将该类对象作为参数传递给TreeSet集合的构造函数。

collection属于单列集合,一次添加一个元素,map属于双列集合,一次添加一对元素,存储的元素存在映射关系的键和值,map集合必须保证键的唯一性,常用的实现类有HashMap,TreeMap,Hashtable,Properties;

package org.blog.test2;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapDemo {
 public static void main(String[] args) {
      Map<String,Integer> map=new HashMap<String,Integer>();
      map.put("a", 1);
      map.put("b", 2);
      map.put("c", 3);
      map.put("d", 4);
      //通过entrySet方法获取键和值所在的Set集合
      Set<Map.Entry<String, Integer>> entrySet=map.entrySet();
      Iterator<Map.Entry<String, Integer>> it=entrySet.iterator();
      while(it.hasNext()){
       Map.Entry<String, Integer> me=it.next();
       String key=me.getKey();//获取键
       Integer value=me.getValue();//获取值
       System.out.println(key+value);      
      }
      //通过keySet方法获取键所在的Set集合
      Set<String> keySet=map.keySet();
      Iterator<String> it1=keySet.iterator();
      while(it1.hasNext()){
       String key=it1.next();
       Integer value=map.get(key);//根据键获取值
       System.out.println(key+value);
      }
 }
}

上面是HashMap中获取元素的两种方法,可以调用entrySet方法获取键和值所在的Set集合,带泛型的Map.Entry<K,V>接口中,有直接获取键和值的方法getKey,getValue;也可以调用keySet方法获取键所在的set集合,再调用get(key)获取值。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值