Java进阶之--------集合2
生活随笔
收集整理的這篇文章主要介紹了
Java进阶之--------集合2
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
回顧
做個(gè)小案例,使用ArrayList存儲(chǔ)自定義對(duì)象并遍歷
import java.util.*;public class ArrayListDemo{public static void main(String[] args){//創(chuàng)建ArrayList對(duì)象ArratList arraylist = new ArrayList();//創(chuàng)建學(xué)生對(duì)象Student s1 = new Student("范閑", 23);Student s2 = new Student("范思轍", 22);Student s3 = new Student("雞腿菇?jīng)?#34;, 20);Student s4 = new Student("范若若", 21);Student s5 = new Student("慶帝", 50);//將學(xué)生對(duì)象添加到集合中arrayList.add(s1);arrayList.add(s2);arrayList.add(s3);arrayList.add(s4);arrayList.add(s5);//遍歷方式1:迭代器遍歷 //獲取迭代器Iterator iterator = arrayList.iterator();while(iterator.hasNext){Student s = (Student)iterator.next();System.out.println(s.getName() + "---" + s.getAge());//使用getset方法遍歷數(shù)組for(int i = 0;i < arraylist.size();i++){Student student = (Student)arrayList.get(i);System.out.println(student.getName() + "---" + student.getAge()); }} }//這是student類import java.util.Objects;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}'+"\n";}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&Objects.equals(name, student.name);} }去除集合中字符串的重復(fù)值(字符串的相同內(nèi)容)
方式一:創(chuàng)建一個(gè)新的集合
來(lái)看LinkedList
LinkedList:底層數(shù)據(jù)結(jié)構(gòu)為鏈表,查詢慢,增刪快線程不安全的,效率高LinkedList特有的功能:1、添加功能:void addFirst(Object obj) 在該列表開頭插入指定的元素。void addLast(Object obj) 將指定的元素追加到此列表的末尾。等同于add()方法2、獲取功能:Object getFirst() 返回此列表中的第一個(gè)元素。Object getLast() 返回此列表中的最后一個(gè)元素。3、刪除功能:Object removeFirst() 從此列表中刪除并返回第一個(gè)元素。Object removeLast() 從此列表中刪除并返回最后一個(gè)元素。 public class LinkedListDemo1 {public static void main(String[] args) {//創(chuàng)建LinkedList集合對(duì)象LinkedList linkedList = new LinkedList();//添加元素到集合中linkedList.add("hello");linkedList.add("world");linkedList.add("java");linkedList.add("hadoop");linkedList.add("hive");linkedList.add("spark");System.out.println(linkedList);System.out.println("=======================================");//void addFirst(Object obj) 在該列表開頭插入指定的元素。linkedList.addFirst("flink");System.out.println(linkedList);//void addLast(Object obj) 將指定的元素追加到此列表的末尾。linkedList.addLast("Hbase");System.out.println(linkedList);//Object getFirst() 返回此列表中的第一個(gè)元素。Object first = linkedList.getFirst();System.out.println(first);System.out.println(linkedList);//Object getLast() 返回此列表中的最后一個(gè)元素。Object last = linkedList.getLast();System.out.println(last);System.out.println(linkedList);//Object removeFirst() 從此列表中刪除并返回第一個(gè)元素。Object o = linkedList.removeFirst();System.out.println(o);System.out.println(linkedList);//Object removeLast() 從此列表中刪除并返回最后一個(gè)元素。Object o1 = linkedList.removeLast();System.out.println(o1);System.out.println(linkedList);} }請(qǐng)用LinkedList模擬棧數(shù)據(jù)結(jié)構(gòu)的集合,并測(cè)試
棧的特點(diǎn):先進(jìn)后出題目的真正意思是,自己寫一個(gè)類,底層是LinkedList,調(diào)用自己寫的方法實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu) public class LinkedListTest1{public static void main(String[] args){//創(chuàng)建集合LinkedList list = new LinkedList();//添加數(shù)據(jù)//linkedList.add("hello"); // linkedList.add("world"); // linkedList.add("java");linkedList.addFirst("hello");linkedList.addFirst("world");linkedList.addFirst("java");linkedList.addFirst("hadoop");//遍歷Iterator it = list.iterator();while(it.hasNext()){Object next = iterator.next();System.out.println(next);}} }//如果面試的時(shí)候,你按照上面的寫法 0分 需求:現(xiàn)在有一個(gè)集合,集合中有些字符串的元素,我想判斷一下里面有沒有"bigdata"這個(gè)字符串如果有,我們就添加一個(gè)"yes"ConcurrentModificationException:并發(fā)修改異常當(dāng)不允許這樣的修改時(shí),可以通過檢測(cè)到對(duì)象的并發(fā)修改的方法來(lái)拋出此異常。原因:迭代器是依賴于集合存在的,在遍歷遍歷迭代器元素的時(shí)候,當(dāng)我們判斷成功后,,往集合中添加了一個(gè)元素,但是呢,迭代器這個(gè)時(shí)候并不知道已經(jīng)添加了元素,所以就報(bào)錯(cuò)了。簡(jiǎn)單描述為:在迭代器遍歷的時(shí)候,不能通過集合去修改元素。解決辦法:1、迭代器遍歷,迭代器修改2、集合遍歷,集合修改 public class ListQuestion {public static void main(String[] args) {//創(chuàng)建一個(gè)集合對(duì)象List list = new ArrayList();list.add("hello");list.add("world");list.add("java");list.add("bigdata");list.add("hadoop");//獲取迭代器對(duì)象 // Iterator iterator = list.iterator();// while (iterator.hasNext()){ // String s = (String) iterator.next(); // if("bigdata".equals(s)){ // list.add("yes"); // } // }//迭代器遍歷,迭代器修改 // ListIterator listIterator = list.listIterator(); // while (listIterator.hasNext()){ // String s = (String) listIterator.next(); // if("bigdata".equals(s)){ // listIterator.add("yes"); //在迭代器元素"bigdata"后面添加 // } // }//集合遍歷,集合修改for(int i=0;i<list.size();i++){String s = (String) list.get(i);if("bigdata".equals(s)){list.add("yes"); //在集合尾部添加}}System.out.println(list);} } Vector:底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢線程安全的,效率低(雖然是線程安全的,以后我們也不使用它,后面會(huì)說(shuō)一個(gè)線程安全的類替代它)Vector特有的方法:public void addElement(Object obj)將元素添加到集合的末尾 效果和add()一樣public Object elementAt(int index)返回指定索引處的組件 get(int index)public Enumeration elements()返回此向量的組件的枚舉 public class VectorDemo1 {public static void main(String[] args) {//創(chuàng)建Vector集合對(duì)象Vector vector = new Vector();//向集合中添加元素vector.addElement("hello");vector.add("world");vector.addElement("java");//public Object elementAt(int index)Object o = vector.elementAt(0);System.out.println(o);System.out.println(vector.elementAt(1));System.out.println(vector.elementAt(2)); // System.out.println(vector.elementAt(3));// System.out.println(vector.get(0));//public Enumeration elements()Enumeration elements = vector.elements();while (elements.hasMoreElements()){Object o1 = elements.nextElement();System.out.println(o1);}System.out.println("=====================================");System.out.println(vector);} }總結(jié)
以上是生活随笔為你收集整理的Java进阶之--------集合2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东秒杀倒计时
- 下一篇: 猿创征文丨深度学习基于双向LSTM模型完