黑马程序员_java_集合框架_Collection_List_Set_Map_泛型

时间:2023-02-18 07:56:49


------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

Collection:
 1-List:元素是有序的,元素可以重复。以为有索引。
  ArrayList:底层使用的数据结构是数组结构,线程不同步。特点:查询速度快,增删慢。
  LinkdeList:底层使用的是链表结构,特点:增删速度快,查询慢。
   特有方法:
    addFirst();addLast();
    getFirst();getLast();获取元素,但不删除元素。抛异常
    removeFirst();removeLast();获取元素,并删除元素。抛异常
   JDK1.6以后出现了替代方法
    offerFirst();offerLast();
    peekFirst();peekLast();获取元素,但不删除元素。不抛异常
    pollFirst();pollLast();获取元素,并删除元素。不抛异常
  Vector: 底层使用的数组结构,线程同步,被ArrayIist替代了。
 2-Set:元素是无序的,不可以重复。
  HashSet:底层数据结构是哈希表。
   HashSet是如何保证元素的唯一性?
    通过两个方法,hasCode和equals方法来完成的
    如果元素的hashCode值相同,才会判断equals是否为true
    如果元素的hashCode值不同,才会调用equals方法。
    对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法
  TreeSet:可以集合中的元素进行排序。底层的数据结构是二叉树。
   保证元素唯一性的依据:compareTo方法returne 0;
   TreeSet排序的第一种方式:让元素自身具有比较性。
    元素需要实现Comparable接口,覆盖compareTo方法。
  Set集合的功能和Collection是一致的。
List:
 凡是可以操作角标的方法都是该体系特有的方法。
增:
 add(index,element);
 addAll(index,Collection);
删:
 remove(index);
改:
 set(index,element);
查:
 get(index);
 subList(from,to);
 listiterator();
代码实现:
 import java.util.*;

class ListDemo
{
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
 public static void main(String[] args)
 {
  ArrayList al =  new ArrayList();
  al.add("01");
  al.add("02");
  al.add("03");
  al.add("04");
  sop("原集合:"+al);
  al.add(4,"05");
  sop("新集合(增):"+al);
  al.remove(0);
  sop("新集合(删):"+al);
  al.set(1,"00");
  sop("新集合(改):"+al);
  System.out.println("新集合(查):");
  for(int x = 0;x<al.size();x++)
  {
   sop(al.get(x));
  }

 }
}
List集合特有的迭代器。ListIterator是Iteratord的子类接口
import java.util.*;
class ListIteratorDemo
{
 public static void sop(Object obj)
 {
  System.out.print(obj);
 }
 public static void main(String[] args)
 {
  ArrayList al = new ArrayList();
  al.add("01");
  al.add("02");
  al.add("03");
  al.add("04");
  sop("原集合:"+al);
  ListIterator li = al.listIterator();

  while(li.hasNext())
  {
   Object obj = li.next();
   if(obj.equals("01"))
   {
    li.set("00");
   }
  }
  sop("新集合:"+al);
  
 }
}


import java.util.*;

/*
LinkedList练习
堆列:先进后出,杯子。
队列:先进先出,水管。
*/
class LinkedListTest
{
 public static void main(String[] args)
 {
  Queue q = new Queue();
  q.myAdd("java01");
  q.myAdd("java02");
  q.myAdd("java03");
  q.myAdd("java04");

  while(!q.isNull())
  {
   System.out.println(q.myGet());
  }
 }
}


class Queue
{
 private LinkedList queue;
 public Queue()
 {
  queue = new LinkedList();
 }

 public void myAdd(Object obj)
 {
  queue.addFirst(obj);
 }
 public Object myGet()
 {
  return queue.removeFirst();//ruturn queue.removeLast();先进先出
 }
 public boolean isNull()
 {
  return queue.isEmpty();
 }
}


泛型:

 JDK1.5版本以后出的新特性,用于解决安全问题,是一个类型安全机制。
优点:
 将运行时出现的ClassCastException异常,转移到编译时期。方便程序员解决问题,让运行问题减少,安全。
 避免了强制转换麻烦。
import java.util.*;

class GenericDemo
{ public static void sop(Object obj)
 {
  System.out.println(obj);
 }
 public static void main(String[] args)
 {
  ArrayList <String> al = new ArrayList<String>();

  al.add("java01");
  al.add("java02");
  al.add("java03");
  al.add("java04");

  Iterator <String> it = al.iterator();

  while(it.hasNext())
  {
   sop(it.next());
  }
 }
}


Map集合:
 该集合存储键值对,一对一对往里存,而且保证键的唯一性。
 1、添加
  put(K key,V value);
  putAll(Map<? extends K,? extends V >m);
 2、删除
  clear();
  remvoe(Object key);
 3、判断
  containsValue(Object value);
  containsKey(Object key);
  isEmpty();
 4、获取
  get(Object key);
  size();
  values();
  entrySet();
  keySet();

子类对象:
 Hashtable:底层是哈希表结构,不可以存入null键和null值,线程同步。
 HashMap:底层是哈希表结构,可以存入null键和null值,线程不同步。
 TreeMap:底层是二叉树结构,线程不同步。可以用于给May集合中的键进行排序。
 和Set很像,其实Set底层就是使用了Map集合。


import java.util.*;
/*
keySet();方法的使用
*/
class KeySetDemo
{
 public static void main(String[] args)
 {
  Map<String,String> map = new HashMap<String,String>();
  map.put("01","001");
  map.put("02","002");
  map.put("03","003");
  

  Set<String> keySet = map.keySet();

  Iterator<String> it = keySet.iterator();

  while(it.hasNext())
  {
   String key = it.next();

   String value = map.get(key);

   System.out.println("key="+key+",,value="+value);
  }

 }
}


import java.util.*;
/*
entrySet()方法的使用
*/
class  EntrySetDemo
{
 public static void main(String[] args)
 {
  Map<String,String> map = new HashMap<String,String>();
  map.put("01","001");
  map.put("02","002");
  map.put("03","003");

  Set<Map.Entry<String,String>> entrySet = map.entrySet();

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

  while(it.hasNext())
  {
   Map.Entry<String,String> me = it.next();

   String key = me.getKey();

   String value = me.getValue();

   System.out.println("key="+key+",,value="+value);
  }

 }
}