亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

黑馬程序員系列第四篇集合(1)

2019-11-14 15:06:08
字體:
來源:轉載
供稿:網友

asp.net+Android+IOS開發  、Net培訓、期待與您交流!

 

(前言:本篇文章主要依據畢向東老師的課程視頻整理而成,如要詳細學習,請觀看畢老師視頻  百度網盤鏈接地址:http://pan.baidu.com/s/1o6mwDzO)

 

目錄:1、集合概述      2、Collection、Iterator接口     3、List接口與其ArrayList、LinkedList、Vector子類   4、Set接口及其HashSet、TreeSet子類

 

1、集合概述 

 

下圖為JDK中集合的框架設計圖,我們主要使用的集合為黑色方框中的四種集合。

數組和集合的不同:集合中對象數量不定,而數組中對象數量必須是確定的。

ArrayList  底層數據存儲結構是數組結構   特點:查詢速度快,增刪稍慢,線程不同步

LinkedList 底層數據結構是鏈表結構        特點:查詢稍慢,增刪快

Vector      底層是數組數據結構             特點:都很慢,線程同步,出現最早,已經被ArrayList替代了現在很少用

Set          集合中的元素是無序的(存入和取出的順序不一定一致),元素不可以重復。

HashSet   底層數據結構是hash表

TreeSet    底層數據結構是二叉樹/紅黑樹

 

2、Collection、Iterator接口 

迭代器 Iterator  是為了方便集合操作元素而定義。而且專門為List集合定義了特有的迭代器ListIterator(為Iterator接口的子接口)

注意:使用迭代器時,不可以再通過集合對象的方法操作集合中的對象,會發生ConcurrentModification異常。

兩個基本接口中的方法很重要

代碼演示了Collection方法的使用以及遍歷的操作方式(例子很普通,主要看下遍歷的操作方法)

 1 public class CollectionTest { 2     public static void main(String[] args) { 3         List d=new ArrayList();//新建集合、向集合中添加對象 4         d.add("jake");  5         d.add("alean"); 6         d.add("sam");            7         iteratorTest(d); 8     } 9     //如何使用ListIterator進行遍歷操作對象10     public static void iteratorTest(List c){11            ListIterator it=c.listIterator();12            while(it.hasNext()){13                //ListIterator中添加14                if(it.next()!=null){  15                    it.add("nanjing");16                }17 //               ListIterator中修改18 //               if(it.next()=="jake"){19 //                   it.set("beokj");20 //               }             21            }22            System.out.PRintln(c);23     }24     //collection接口方法使用25     public static void collectionMethods(){26         Collection c=new ArrayList();27         Collection d=new ArrayList();28         //增加29         d.add("jake"); d.add("alean");d.add("sam");30         c.addAll(d);31         //刪除32         //c.remove("jake");33         //c.removeAll(c);34         //c.clear();35         System.out.println(c.isEmpty());36         System.out.println(c+":size="+c.size());37     }38 }

 

3、List接口與其ArrayList、LinkedList、Vector子類

      ArrayList中涉及到比較集合中對象是否相同中用到的底層方法是集合中對象的equals()方法

      LinkedList中的方法  JDK1.6以后出現了替代getFirst()/getLast()/removeFirst()/removeLast()方法的

      offerFirst/offerLast/peekFirst()/peekLast()新方法,新方法的優勢是集合中沒有元素了不會出現NoSuchElementException異常

      Vector  有特有的枚舉方式取數據。其實枚舉和迭代是一樣的,枚舉的名稱和方法名稱過長,所以被迭代器取代了,僅做了解

   ArrayList 演示代碼(除去集合中的重復對象)

 1 public class ArrayListDemo { 2  3     public static void main(String[] args) { 4         //新建一個ArrayList類型集合,向其中添加Person對象 5          ArrayList al=new ArrayList(); 6         al.add(new Person("jack",12)); 7         al.add(new Person("jack",12)); 8         al.add(new Person("jack",11)); 9         al.add(new Person("jack2",12));10         al.add(new Person("jack",12));
//除去al集合中的相同對象,打印結果
11 System.out.println(singleElement(al));12 }13 //刪除ArrayList集合中重復的元素14 public static ArrayList singleElement(ArrayList arrays){15 ArrayList al=new ArrayList(); 16 Iterator ite=arrays.iterator();17 //通過while循環,在其中用ArrayList的contains方法判斷是否重復18 while(ite.hasNext()){19 Object obj=ite.next();20 if(!al.contains(obj))21 al.add(obj);22 }23 return al;24 }25 26 }27 //Person類28 class Person{29 private String name;30 private int age;31 //共有全參構造方法32 public Person(String name, int age) {33 super();34 this.name = name;35 this.age = age;36 }37 public String getName() {38 return name;39 }40 public void setName(String name) {41 this.name = name;42 }43 public int getAge() {44 return age;45 }46 public void setAge(int age) {47 this.age = age;48 }49 //重寫equals方法,自定義比較的依據,這里我們定義對象的姓名、年齡都相同時,對象才相等50 public boolean equals(Object obj) {51 Person per=(Person)obj; 52 if(!(obj instanceof Person)) 53 return false;54 else 55 return per.name.equals(name) && per.age==age;56 }57 //重寫toString方法,便于查看程序的運行結果58 public String toString() {59 return name+"::"+age;60 }61 62 }

 

LinkedList示例代碼(用LinkedList模擬堆棧(先進后出)和隊列(先進先出)數據結構)

 1 public class LinkedListDemo { 2     public static void main(String[] args) { 3          4         Queue queue=new Queue(); 5         queue.set("紅"); 6         queue.set("黃"); 7         queue.set("藍"); 8         queue.set("紫"); 9         10         while(!queue.isNull()){11             System.out.println(queue.get());12         }13     }14 }15 //模擬隊列,先進先出16 class Queue{17     private LinkedList ll;18     public  Queue(){19          ll=new LinkedList();20      }21     public Object get(){22         return ll.removeFirst();23     }24     public void set(Object obj){25         ll.addLast(obj);26     }27     public boolean isNull(){28         return ll.isEmpty();29     }30 }31 //模擬堆棧-先進后出32 class Stack{33     private LinkedList ll;34     public  Stack(){35          ll=new LinkedList();36      }37     public Object get(){38         return ll.removeLast();39     }40     public void set(Object obj){41         ll.addLast(obj);42     }43     public boolean isNull(){44         return ll.isEmpty();45     }46 }

 

 4、Set接口及其HashSet、TreeSet子類

HashSet 中比較的底層原理 : 先調用hashcode方法判斷對象hash值是否相同,若相同,再調用對象那個的equels()方法,判斷對象是否相同

實際開發中,新建集合中的對象時,都要重寫對象的hashcode和equals方法

 

TreeSet : 可以對TreeSet集合中的元素進行自然排序。

第一種排序方式:比較原理是在集合元素中實現CompareTo接口

第二種排序方式:當元素自身不具備比較性時,可讓集合具有比較性。方法:定義比較器(即實現了Comparator接口的類),將比較器對象作為參數傳遞給TreeSet集合的構造函數。

總結:兩種方式中,第二種方式基于接口編程,拓展性好,比較常用。如果兩種排序方式同時存在,系統使用第二種方式

 

 HashSet集合的代碼示例

 1 public class HashSetDemo{ 2  3     public static void main(String[] args) { 4           5         HashSet hs=new HashSet(); 6         hs.add(new Persons("Tom1",24));     7         hs.add(new Persons("Tom1",25));   8         hs.add(new Persons("Tom1",24));   9         //遍歷器來查詢集合中對象10         Iterator ite=hs.iterator();11         while(ite.hasNext())12             System.out.println(ite.next());13     }14 }15 //Person類16 class Persons{17     private String name;18     private int age;19     //共有全參構造方法20     public Persons(String name, int age) {21         super();22         this.name = name;23         this.age = age;24     }25     public String getName() {26         return name;27     }28     public void setName(String name) {29         this.name = name;30     }31     public int getAge() {32         return age;33     }34     public void setAge(int age) {35         this.age = age;36     }37     //重寫hashCode方法,自己定義判斷38     public int hashCode(){39         return name.hashCode()+age;40     }41   //重寫equals方法,自定義比較的依據,這里我們定義對象的姓名、年齡都相同時,對象才相等42     public boolean equals(Object obj) {43         Persons per=(Persons)obj;         44             if(!(obj instanceof Persons))                45                 return false;46             else         47                 return per.name.equals(name) && per.age==age;48     }49   //重寫toString方法,便于查看程序的運行結果50     public String toString() {51         return name+"::"+age;52     }    53 }

 

TreeSet代碼示例

同時實現了兩種排序方式。驗證了兩種排序方式共存是,系統采用何種方式

 1 public class TreeSetDemo { 2 //兩種比較方式共存,系統采用比較器的比較方式 3     public static void main(String[] args) { 4          5        TreeSet ts=new TreeSet(new comparator()); 6         ts.add(new Persont("bbama1",22)); 7         ts.add(new Persont("abama3",22)); 8         ts.add(new Persont("abama2",24)); 9         ts.add(new Persont("abama3",21));10         11         Iterator ite=ts.iterator();12         while(ite.hasNext()){13             System.out.println(ite.next());14         }15     }16 17 }18 //實現比較器,規定元素按照姓名排序,姓名相同的按年齡排序19 class comparator implements Comparator{20     @Override21     public int compare(Object o1, Object o2) {22         Persont p1=(Persont)o1;23         Persont p2=(Persont)o2;24         int i=p1.getName().compareTo(p2.getName());25         if(i==0)26             return p1.getAge()-p2.getAge();27         else return i;28     }    29 }30 //Person類,規定元素按照年齡排序,年齡相同的按姓名排序31 class Persont implements Comparable<Persont>{32     private String name;33     private int age;34     //共有全參構造方法35     public Persont(String name, int age) {36         super();37         this.name = name;38         this.age = age;39     }40     public String getName() {41         return name;42     }43     public void setName(String name) {44         this.name = name;45     }46     public int getAge() {47         return age;48     }49     public void setAge(int age) {50         this.age = age;51     }52 53   //重寫toString方法,便于查看程序的運行結果54     public String toString() {55         return name+"::"+age;56     }57 @Override58 public int compareTo(Persont per) {59     if(age>per.age)60     return 1;61     if(age==per.age){62         return name.compareTo(per.name);63     }    64     else65         return -1;66 }    67 }

 

 

       初學者難免錯誤,歡迎評判指教,持續更正ing...........

 

ASP.Net+Android+IOS開發  、Net培訓、期待與您交流!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美日韩最新| 国产在线精品一区免费香蕉| 成人免费视频在线观看超级碰| 欧美插天视频在线播放| 国内外成人免费激情在线视频网站| 国产精自产拍久久久久久蜜| 欧美黑人一级爽快片淫片高清| 精品国产户外野外| 国产精品激情av在线播放| 欧美一性一乱一交一视频| 国产精品久久久久免费a∨大胸| 成人福利网站在线观看11| 久久99精品久久久久久噜噜| 欧美综合激情网| 国语自产精品视频在线看| 在线精品高清中文字幕| 久久国产精品久久国产精品| 热99在线视频| 国产精品电影网站| 美女少妇精品视频| 国产日韩中文字幕在线| 91色琪琪电影亚洲精品久久| 亚洲自拍偷拍在线| 成人xxxxx| 日本乱人伦a精品| 国产精品久久久久免费a∨大胸| 国产精品久久久久久久久久东京| 日韩在线视频观看正片免费网站| 国产亚洲激情视频在线| 亚洲精品福利资源站| 91久热免费在线视频| 91伊人影院在线播放| 日韩中文字幕在线免费观看| 丝袜美腿亚洲一区二区| 国产精品成人免费视频| 亚洲国产成人精品久久久国产成人一区| 欧洲成人在线观看| 欧美日韩一区二区三区| 欧美性生交xxxxxdddd| 国产一区香蕉久久| 久久好看免费视频| 亚洲伊人成综合成人网| 国产精品爽黄69天堂a| 亚洲精品女av网站| 亚洲精品一区二三区不卡| 日韩电影大全免费观看2023年上| 日韩激情片免费| 91精品国产乱码久久久久久蜜臀| 国产精品99久久久久久www| 国产精品欧美激情在线播放| 亚洲国产欧美精品| 日韩在线免费观看视频| 不卡av电影在线观看| 91精品国产91久久久久久| 亚洲欧美视频在线| 92国产精品视频| 国产精品久久久久av免费| 欧美国产亚洲精品久久久8v| 在线看日韩欧美| 国产亚洲精品va在线观看| www.欧美精品一二三区| 国产日本欧美在线观看| 亚洲一品av免费观看| 26uuu日韩精品一区二区| 国产成人久久精品| 97在线视频国产| 视频在线观看一区二区| 国产精品av网站| 久久久久久国产精品美女| 九九热精品视频| 亚洲精品日韩激情在线电影| 精品丝袜一区二区三区| 欧美一区二三区| 亚洲黄色免费三级| 日韩在线中文字幕| 日韩久久精品成人| 日韩中文字幕网站| 日韩视频在线免费| 91禁国产网站| 亚洲网址你懂得| 在线性视频日韩欧美| 国产精品午夜视频| 欧美性少妇18aaaa视频| 久久亚洲一区二区三区四区五区高| 精品久久久久久国产91| 上原亚衣av一区二区三区| 久久精品福利视频| 久久久久久久一区二区| 91中文在线视频| 国产精品草莓在线免费观看| 日韩电影中文 亚洲精品乱码| 九九热这里只有精品免费看| 日韩精品免费在线视频| 国产精品久久久久7777婷婷| 成人亚洲激情网| 欧美激情中文字幕在线| 日韩精品视频中文在线观看| 亚洲一区二区三区视频| 欧美在线视频一二三| 91精品国产777在线观看| 久久免费国产精品1| 午夜精品久久久久久99热| 欧美性xxxx在线播放| 68精品久久久久久欧美| 国产精品女主播| 97超碰蝌蚪网人人做人人爽| 91精品国产91久久久久久最新| 日韩av电影在线免费播放| 亚洲精品www久久久| 亚洲精品久久久久国产| 亚洲国产精品va在线看黑人动漫| 日韩大片免费观看视频播放| 最近2019年中文视频免费在线观看| 欧美日韩国产999| 国产日韩欧美日韩大片| 91av在线看| 4k岛国日韩精品**专区| 亚洲理论电影网| 国产精品久久久久久久久久久久| 日韩欧美国产激情| 成人午夜激情免费视频| 亚洲电影av在线| 午夜精品久久久久久久久久久久久| 国产午夜一区二区| 精品人伦一区二区三区蜜桃免费| 亚洲国产成人爱av在线播放| 欧美黑人性生活视频| 欧美在线视频免费播放| 亚洲性视频网址| 最近2019中文字幕大全第二页| 欧美激情精品久久久久久久变态| 美女啪啪无遮挡免费久久网站| 国模吧一区二区三区| 红桃av永久久久| 欧美最近摘花xxxx摘花| 亚洲免费福利视频| 国产视频在线一区二区| 91免费高清视频| 欧美成人免费大片| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲精品欧美日韩| 尤物精品国产第一福利三区| 国内精品免费午夜毛片| 欧美理论片在线观看| 日韩在线观看你懂的| 26uuu亚洲国产精品| 国产免费一区二区三区在线观看| 欧洲午夜精品久久久| 欧洲亚洲妇女av| 91av在线网站| 国产精品美女主播在线观看纯欲| 欧美精品久久久久久久久久| 国产精品6699| 97国产一区二区精品久久呦| 91地址最新发布| 性欧美办公室18xxxxhd| 久精品免费视频| 亚洲性av在线| 国产男人精品视频| 播播国产欧美激情| 欧亚精品在线观看| 久久久久久久一区二区| 另类天堂视频在线观看| 亚洲精品永久免费精品|