<<黑马程序员>>JAVA基础之集合

来源:互联网 发布:快速排序算法实例 编辑:程序博客网 时间:2024/05/16 07:25

1.定义及特点
集合就是用来存储对象的容器,集合的长度是可变的,可以存储不同类型的对象,集合分为单列集合和双列集合,单列集合的顶层为Collection接口,双列集合的顶层为Map接口。
2.Collection集合
Collection集合是接口,无法创建对象,只能通过其子类来创建对象,Collection下面还有两个自接口,一个是List接口,一个是Set接口。有增删查改等方法,还有用迭代器获取元素的方法。
代码演示Collection迭代器:
public static void show() {
 Collection<String> co= new ArrayList<String>();
 co.add("aa");
 co.add("bb");
 co.add("cc");
 Iterator<String> it = co.iterator();
 while(it.hasNext()){
  System.out.println(it.next());
 }
 
}

2.1 List接口
List集合的特点是有序的,指存放数据的先后顺序,元素是可以重复的。List下面有2个子类,一个是ArrayList集合,另外一个是LinkedList集合。
ArrayList:
同样是有序,元素可重复,另外可以进行角标操作,集合查改快,增删慢。
实现原理:ArrayList集合底层是用数组来实现数据存储的,当存放的长度超过数组默认的长度时,那么就会自动生成一个长度为原来数组的1.5倍的数组,所以该集合改查快,增删慢。
ArrayList集合特有的迭代器:
Collection自己的迭代器在迭代的时候不能对元素进行操作,否则会出现并发异常。但是可以用ArrayList特有的迭代器
代码演示:
public static void show() {
 ArrayList<String> co= new ArrayList<String>();
 co.add("aa");
 co.add("bb");
 co.add("cc");
 ListIterator<String> it = co.listIterator();
 while(it.hasNext()){
  it.add("dd");
  System.out.println(it.next());
  
 }

LinkedList:
实现原理:LinkedList集合底层是用链表来存储数据的,所以就增删数据块,查找慢,因为是链表来链表来存储的,所以可以模拟堆栈和队列。
模拟堆栈代码演示:
class StackList{
 LinkedList list=null;
 
 public StackList(){
  list=new LinkedList();
 }
 
 public void set(Object obj){
  list.push(obj);
 }
 
 public Object get(){
  return list.pop();
 }
}

模拟队列代码演示:
class TeamList{
 LinkedList list=null;
 public TeamList(){
  list=new LinkedList();
 }
 
 public void set(Object obj){
  list.offer(obj);
  
 }
 
 public Object get(){
  return list.poll();
 }
}

2.2 Set接口
Set集合里面存放的数据是无序的,元素是不可以重复的,Set下面有2个子类,一个是HashSet,一个是TreeSet。
HashSet:
底层使用哈希表来存储数据,所以增删查改都比较快,HashSet集合通过先比较哈希值调用equals方法来判断两个元素是否相等,如果相等,则后一个不存储!
TreeSet:
TreeSet集合底层采用二叉树来存储数据,效率也很高,TreeSet可以自然排序,所以元素必须具备排序功能。TreeSet通过比较器来旁边两个元素是否相同,当比较的值为0时,则相同,则不存储。
元素比较的方式有2种。一种是该元素的类实现Comparable接口,重写compareTo方法。另外一种是自定义比较器,实现Comparator接口,把比较器传入TreeSet中。

3Map集合
Map集合是双列集合,里面存放的是键值对,键是唯一的不可重复的,值是可重复的,Map下面有2个子类,HashMap和TreeMap,显然可知,TreeMap是带比较性的双列集合,底层是二叉树,和TreeSet差不多,双列集合的取出就是讲键先转换成一个set集合即可;
代码演示HashMap的取出元素方式一:
public static void show() {
  HashMap<String,Integer> hs = new HashMap<String,Integer>();
  hs.put("tom", 22);
  hs.put("jun", 31);
  hs.put("bili", 43);
  hs.put("Luck", 15);
  Set set = hs.keySet();
  Iterator<String> it = set.iterator();
  while(it.hasNext()){
   String s = it.next();
   System.out.println(s+":::"+hs.get(s));
  }
 }

代码演示HashMap的取出元素方式二:
public static void show() {
  HashMap<String,Integer> hs = new HashMap<String,Integer>();
 hs.put("tom", 22);
  hs.put("jun", 31);
  hs.put("bili", 43);
  hs.put("Luck", 15);
     Set<Map.Entry<String, Integer>> set=hs.entrySet();
     Iterator<Map.Entry<String, Integer> > it = set.iterator();
     while(it.hasNext()){
      Map.Entry<String, Integer> me =it.next();
      String name=me.getKey();
      int age = me.getValue();
      System.out.println(name+":::"+age);
     }
}

原创粉丝点击