Java进阶之--------集合2
生活随笔
收集整理的這篇文章主要介紹了
Java进阶之--------集合2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
回顧
做個小案例,使用ArrayList存儲自定義對象并遍歷
import java.util.*;public class ArrayListDemo{public static void main(String[] args){//創建ArrayList對象ArratList arraylist = new ArrayList();//創建學生對象Student s1 = new Student("范閑", 23);Student s2 = new Student("范思轍", 22);Student s3 = new Student("雞腿菇涼", 20);Student s4 = new Student("范若若", 21);Student s5 = new Student("慶帝", 50);//將學生對象添加到集合中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方法遍歷數組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);} }去除集合中字符串的重復值(字符串的相同內容)
方式一:創建一個新的集合
來看LinkedList
LinkedList:底層數據結構為鏈表,查詢慢,增刪快線程不安全的,效率高LinkedList特有的功能:1、添加功能:void addFirst(Object obj) 在該列表開頭插入指定的元素。void addLast(Object obj) 將指定的元素追加到此列表的末尾。等同于add()方法2、獲取功能:Object getFirst() 返回此列表中的第一個元素。Object getLast() 返回此列表中的最后一個元素。3、刪除功能:Object removeFirst() 從此列表中刪除并返回第一個元素。Object removeLast() 從此列表中刪除并返回最后一個元素。 public class LinkedListDemo1 {public static void main(String[] args) {//創建LinkedList集合對象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() 返回此列表中的第一個元素。Object first = linkedList.getFirst();System.out.println(first);System.out.println(linkedList);//Object getLast() 返回此列表中的最后一個元素。Object last = linkedList.getLast();System.out.println(last);System.out.println(linkedList);//Object removeFirst() 從此列表中刪除并返回第一個元素。Object o = linkedList.removeFirst();System.out.println(o);System.out.println(linkedList);//Object removeLast() 從此列表中刪除并返回最后一個元素。Object o1 = linkedList.removeLast();System.out.println(o1);System.out.println(linkedList);} }請用LinkedList模擬棧數據結構的集合,并測試
棧的特點:先進后出題目的真正意思是,自己寫一個類,底層是LinkedList,調用自己寫的方法實現棧數據結構 public class LinkedListTest1{public static void main(String[] args){//創建集合LinkedList list = new LinkedList();//添加數據//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);}} }//如果面試的時候,你按照上面的寫法 0分 需求:現在有一個集合,集合中有些字符串的元素,我想判斷一下里面有沒有"bigdata"這個字符串如果有,我們就添加一個"yes"ConcurrentModificationException:并發修改異常當不允許這樣的修改時,可以通過檢測到對象的并發修改的方法來拋出此異常。原因:迭代器是依賴于集合存在的,在遍歷遍歷迭代器元素的時候,當我們判斷成功后,,往集合中添加了一個元素,但是呢,迭代器這個時候并不知道已經添加了元素,所以就報錯了。簡單描述為:在迭代器遍歷的時候,不能通過集合去修改元素。解決辦法:1、迭代器遍歷,迭代器修改2、集合遍歷,集合修改 public class ListQuestion {public static void main(String[] args) {//創建一個集合對象List list = new ArrayList();list.add("hello");list.add("world");list.add("java");list.add("bigdata");list.add("hadoop");//獲取迭代器對象 // 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:底層數據結構是數組,查詢快,增刪慢線程安全的,效率低(雖然是線程安全的,以后我們也不使用它,后面會說一個線程安全的類替代它)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) {//創建Vector集合對象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);} }總結
以上是生活随笔為你收集整理的Java进阶之--------集合2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东秒杀倒计时
- 下一篇: java美元兑换,(Java实现) 美元