java之14天 集合 (二)

LinkedList的使用

Java代码  收藏代码
  1. /**
  2.  * LinkedList:特有方法
  3.  *
  4.  * addFirst()
  5.  * addLast()
  6.  *
  7.  * getFist()
  8.  * getLast()
  9.  * 获取元素 但不删除元素 ,如果集合中没有元素,会出现 NoSuchException
  10.  *
  11.  * removeFirst()
  12.  * removeLast()
  13.  * 也可以获取元素,但是元素会被删除,如果集合中没有元素,会出现,NoSuchException
  14.  * JDK1.6 后出现了 替代方法了
  15.  *   添加
  16.  *   offerFirst()
  17.  *   offerLast()
  18.  *
  19.  *   //获取
  20.  *   peekFirst()
  21.  *   peekLast()
  22.  *   获取元素 但不删除元素 ,如果集合中没有元素,会返回 null
  23.  *
  24.  *   //移除
  25.  *   pollFirst()
  26.  *   pollLast()
  27.  *   也可以获取元素,但是元素会被删除,如果集合中没有元素 会返回null
  28.  */
  29. public class LinkedListDemo {
  30.     public static void main(String[] args) {
  31.         LinkedList link=new LinkedList();
  32.         link.addFirst(“java01”);
  33.         link.addLast(“java02”);
  34.         link.addLast(“java03”);
  35.         link.addFirst(“java04”);
  36.         sop(link);
  37.         //获取第一个 或者  最后一个
  38.         sop(link.getFirst());
  39.         sop(link.getLast());
  40.         //获取 大小
  41.         sop(“size=”+link.size());
  42.         //移除第一个
  43.         sop(“remove=”+link.removeFirst());
  44.         sop(link);
  45.         while(!link.isEmpty()){
  46.             sop(link.removeFirst());
  47.         }
  48.     }
  49.     public static void sop(Object obj){
  50.         System.out.println(obj);
  51.     }
  52. }

LinkedList的练习

Java代码  收藏代码
  1. /**
  2.  * 使用LinkedList模拟堆栈 或者队列数据结构
  3.  * 堆栈: 先进后出     (FILO:First in Last out) 如同一个杯子
  4.  * 队列: 先进先出     (FIFO:First in First out)  如果一个水管
  5.  *
  6.  */
  7. class DuiLie{
  8.     private LinkedList link;
  9.     public DuiLie(){
  10.         this.link=new LinkedList();
  11.     }
  12.     public void myAdd(Object obj){
  13.         link.addFirst(obj);
  14.     }
  15.     public Object myGet(){
  16.         //return link.removeLast(); //队列
  17.         return link.removeFirst();  //堆栈
  18.     }
  19.     public boolean isNull(){
  20.         return link.isEmpty();
  21.     }
  22. }
  23. public class LinkedListTest {
  24.     /**
  25.      * @param args
  26.      */
  27.     public static void main(String[] args) {
  28.         DuiLie dl=new DuiLie();
  29.         dl.myAdd(“java01”);
  30.         dl.myAdd(“java02”);
  31.         dl.myAdd(“java03”);
  32.         dl.myAdd(“java04”);
  33.         while(!dl.isNull())
  34.             System.out.println(dl.myGet());
  35.     }
  36. }

HashSet的使用

Java代码  收藏代码
  1. /**
  2.  *|–Set: 元素是无序的(存入和取出 的顺序不一定一致),元素不可以重复.
  3.  *    |–HashSet: 底层数据结构是哈希表
  4.  *          hashSet是如何保证元素唯一性呢?
  5.  *           是通过元素的两个方法, hashCode 和  equals 来完成的
  6.  *           如果元素的hashCode值相同,才会判断equals 是否为true
  7.  *           如果元素的hashCode值不同,不会调用 equals.
  8.  *
  9.  *           注意: 对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法.
  10.  *
  11.  *
  12.  *    |–TreeSet:
  13.  *
  14.  *
  15.  */
  16. class Student{
  17.     private String name;
  18.     private int age;
  19.     public Student(String name,int age){
  20.         this.name = name;
  21.         this.age = age;
  22.     }
  23.     public int hashCode(){
  24.         System.out.println(this.name);
  25.         return 7*name.hashCode()+13*age;
  26.     }
  27.     @Override
  28.     public boolean equals(Object obj) {
  29.         // TODO Auto-generated method stub
  30.         if(!(obj instanceof Student))
  31.             return false;
  32.         Student s=(Student)obj;
  33.         System.out.println(this.name+”..equals..”+s.name);
  34.         return this.name.equals(s.name) && this.age==s.age;
  35.     }
  36.     public String getName() {
  37.         return name;
  38.     }
  39.     public int getAge() {
  40.         return age;
  41.     }
  42. }
  43. public class HashSetDemo {
  44.     public static void sop(Object obj){
  45.         System.out.println(obj);
  46.     }
  47.     public static void main(String[] args) {
  48.         HashSet hs=new HashSet();
  49.         hs.add(new Student(“a1”,11));
  50.         hs.add(new Student(“a2”,12));
  51.         hs.add(new Student(“a3”,13));
  52.         //重复的没有被添加进去, 先算hashCode  使用equals 比较
  53.         hs.add(new Student(“a2”,12));
  54.         hs.remove(new Student(“a2”,13));
  55.         hs.remove(new Student(“a4”,14));
  56.         sop(hs.contains(new Student(“a1”,11)));
  57.         Iterator it=hs.iterator();
  58.         while(it.hasNext()){
  59.             Student s=(Student)it.next();
  60.             sop(s.getName()+”….”+s.getAge());
  61.         }
  62.     }
  63.     public static void method(){
  64.          Student stu1 = new Student(“aa”,17);
  65.            Student stu2 = new Student(“aa”,17);
  66.            System.out.println(stu1.hashCode());
  67.            System.out.println(stu2.hashCode());
  68.            System.out.println(stu1 == stu2);
  69.            HashMap<Student,String> hm=new HashMap<Student,String>();
  70.            hm.put(stu1, “aa”);
  71.            hm.put(stu2, “bb”);
  72.            Set<Student> ss=hm.keySet();
  73.            Collection<String> cv=hm.values();
  74.            for (Student student : ss) {
  75.                sop(student);
  76.            }
  77.            for (String str : cv) {
  78.                sop(str);
  79.            }
  80.     }
  81. }

标签