1_(去除ArrayList中重復字符串元素方式)*
A:案例演示
需求:ArrayList去除集合中字符串的重復值(字符串的內容相同)
思路:創建新集合方式
import java.util.ArrayList; import java.util.Iterator; public class ArrayList_1_demo { /* 創建新集合將重復元素去掉 * 1.明確返回值類型,返回ArrayList * 2.明確參數列表ArrayList * */ public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("a"); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("c"); list.add("b"); ArrayList newList = getSingle(list); System.out.println(newList); } public static ArrayList getSingle(ArrayList list) { ArrayList newList = new ArrayList(); //1.創建新集合 Iterator it = list.iterator(); //2.根據傳入的集合(老集合)獲取迭代器 while(it.hasNext()) { //3.遍歷老集合 Object obj = it.next(); //4.臨時記錄每一個元素 if(!newList.contains(obj)) { //5.如果新集合中不包含老集合中的元素 newList.add(obj); //6.將新元素添加到新集合中 } } return newList; //7.將新集合返回 } }2_(去除ArrayList中重復自定義對象元素)*
A:案例演示
需求:ArrayList去除集合中自定義對象元素的重復值(對象的成員變量值相同)
B:注意事項
重寫equals()方法的
contains方法判斷是否包含,底層依賴的是equals方法
remove方法判斷是否刪除,底層依賴的是equals方法
import java.util.ArrayList; import java.util.Iterator; import net.allidea.bean.Person; @SuppressWarnings({ "rawtypes", "unchecked" }) public class ArrayList_2_demo { public static void main(String[] args) { ArrayList list = new ArrayList(); //創建集合對象 list.add(new Person("張三",23)); list.add(new Person("李四",24)); list.add(new Person("張三",23)); list.add(new Person("張三",23)); list.add(new Person("王五",23)); list.add(new Person("李四",24)); // ArrayList newList = getSingle(list); //調用方法去除重復 // System.out.println(newList); list.remove(new Person("張三",23)); System.out.println(list); } public static ArrayList getSingle(ArrayList list) { ArrayList newList = new ArrayList(); //1.創建新集合 Iterator it = list.iterator(); //2.根據傳入的集合(老集合)獲取迭代器 while(it.hasNext()) { //3.遍歷老集合 Object obj = it.next(); //4.臨時記錄每一個元素 if(!newList.contains(obj)) { //5.如果新集合中不包含老集合中的元素 newList.add(obj); //6.將新元素添加到新集合中 } } return newList; //7.將新集合返回 } }
@Override//重寫equals方法 public boolean equals(Object obj) { Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.age; }3_(LinkedList的特有功能)*
A:LinkedList類概述
B:LinkedList類特有功能
public void addFirst(E e)及addLast(E e)
public E getFirst()及getLast()
public E removeFirst()及public E removeLast()
public E get(int index);
import java.util.LinkedList; public class ArrayList_3_LinkedList { public static void main(String[] args) { LinkedList list = new LinkedList(); list.addFirst("a"); list.addFirst("b"); list.addFirst("c"); list.addFirst("d");//在頭部添加 list.addLast("e");//在尾部添加 // System.out.println(list.getFirst());//打印頭部元素 // System.out.println(list.getLast());//打印尾部元素 // System.out.println(list.removeFirst());//刪除頭 // System.out.println(list.removeLast());//刪除尾 System.out.println(list.get(1)); System.out.println(list); } }4_(棧和隊列數據結構)*
棧
先進后出 (裝子彈原理)
隊列
先進先出(水龍頭原理)
5_用LinkedList模擬棧數據結構的集合并測試*
A:案例演示
需求:請用LinkedList模擬棧數據結構的集合,并測試
創建一個類將Linked中的方法封裝
import java.util.LinkedList; import java.util.Stack; public class ArrayList_4_LinkedList { public static void main(String[] args) { // demo1(); stack s = new stack(); //進棧 s.in("a"); s.in("b"); s.in("c"); s.in("d"); while(!s.isEmpty()) { //是否為空 System.out.println(s.out());//彈棧 } } private static void demo1() { LinkedList list = new LinkedList(); list.addLast("a"); list.addLast("b"); list.addLast("c"); list.addLast("d"); /* System.out.println(list.removeLast()); System.out.println(list.removeLast()); System.out.println(list.removeLast()); System.out.println(list.removeLast());*/ while (!list.isEmpty()) { System.out.println(list.removeLast()); } } }
import java.util.LinkedList; public class stack { private LinkedList list = new LinkedList(); //模擬進棧方法 public void in(Object obj) { list.addLast(obj); } //模擬出棧方法 public Object out() { return list.removeLast(); } //模擬棧結構是否為空 public boolean isEmpty() { return list.isEmpty(); } }6_泛型概述和基本使用*
A:泛型概述
B:泛型好處
提高安全性(將運行期的錯誤轉換到編譯期)
省去強轉的麻煩
C:泛型基本使用
<>中放的必須是引用數據類型
D:泛型使用注意事項
前后的泛型必須一致,或者后面的泛型可以省略不寫(1.7的新特性菱形泛型)
import java.util.ArrayList; import java.util.Iterator; import net.allidea.bean.Person; public class Generic_1_demo { public static void main(String[] args) { // demo1(); // int[] arr = new byte[5]; //數組要保證前后的數據類型一致 // ArrayList7_ArrayList存儲字符串和自定義對象并遍歷泛型版*
A:案例演示
ArrayList存儲字符串并遍歷泛型版
import java.util.ArrayList; import java.util.Iterator; import net.allidea.bean.Person; public class Generic_2_demo public static void main(String[] args) { // demo1(); demo2(); } private static void demo2() { ArrayList8_泛型的由來(了解)list = new ArrayList<>(); list.add(new Person("張三",23)); list.add(new Person("李四",24)); list.add(new Person("王五",25)); list.add(new Person("趙六",26)); Iterator it = list.iterator(); while(it.hasNext()) { Person p = it.next(); //將集合中的每一個元素用Person記錄 System.out.println(p.getName() + "..." + p.getAge()); } } private static void demo1() { ArrayList list = new ArrayList(); //創建集合對象 list.add("a"); list.add("b"); list.add("c"); list.add("d"); Iterator it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }
A:案例演示
泛型的由來:通過Object轉型問題引入
早期的Object類型可以接收任意的對象類型,但是在實際的使用中,會有類型轉換的問題。也就存在這隱患,所以Java提供了泛型來解決這個安全問題。
import net.allidea.bean.Animal; //Animal 繼承 Person及其構造 import net.allidea.bean.Person; //Person private String name;private int age; import net.allidea.bean.Tool; //Tool 自定義類private Object obj; import net.allidea.bean.Worker; //Worker 繼承 Person及其構造 public class Generic_3_demo { public static void main(String[] args) { Tool t = new Tool(); //創建工具類對象 t.setObj(new Animal("張三",23)); Worker w = (Worker)t.getObj(); //向下轉型 System.out.println(w); } }9_泛型類的概述及使用(了解)
A:泛型類概述
把泛型定義在類上
B:定義格式
public class 類名<泛型類型1,…>
C:注意事項
泛型類型必須是引用類型
D:案例演示
泛型類的使用
import net.allidea.bean.Animal; //Animal 繼承 Person及其構造 import net.allidea.bean.Person; //Person private String name;private int age; import net.allidea.bean.Tool; //Tool 自定義類private Object obj; import net.allidea.bean.Worker; //Worker 繼承 Person及其構造 public class Generic_3_demo { public static void main(String[] args) { Toolt = new Tool<>(); //創建工具類對象 t.setObj(new Animal("張三",23)); // Worker w = (Worker)t.getObj(); //報錯 // System.out.println(w); } }
//Tool文件 package net.allidea.bean; public class Tool10_泛型方法的概述和使用(了解){ //E代表元素 private Q q; public Q getObj() { return q; } public void setObj(Q q) { this.q = q; } }
A:泛型方法概述
把泛型定義在方法上
B:定義格式
public <泛型類型> 返回類型 方法名(泛型類型 變量名)
C:案例演示
泛型方法的使用
import net.allidea.bean.Animal; //Animal 繼承 Person及其構造 import net.allidea.bean.Tool; //Tool 自定義類private Object obj; public class Generic_3_demo { public static void main(String[] args) { Toolt = new Tool<>(); // t.show("abc"); t.show(true); //無類型,自動裝箱 } }
package net.allidea.bean; public class Tool11_泛型接口的概述和使用(了解){ //E代表元素 private Q q; public Q getObj() { return q; } public void setObj(Q q) { this.q = q; } publicvoid show(T t) { //方法泛型需要與類的泛型一致 System.out.println(t); //如果不一致,需要在方法上聲明該類型 } public static void print(Q q) { //靜態方法必須聲明自己的泛型,加載早此Q非彼Q System.out.println(q); } }
A:泛型接口概述
把泛型定義在接口上
B:定義格式
public interface 接口名<泛型類型>
C:案例演示
泛型接口的使用
package net.allidea.Generic; public class Generic_4_demo { public static void main(String [] args) { } } interface Inter12_(泛型高級之通配符)(了解){ //接口泛型 public void show(T t); //抽象方法 } /*class Demo implements Inter { //第一種方式實現接口泛型,推薦 @Override public void show(String t) { //重寫抽象方法 System.out.println(t); } }*/ class Demo implements Inter { //沒有必要再實現接口的時候,給自己類加泛型 @Override public void show(T t) { System.out.println(t); } }
A:泛型通配符>
任意類型,如果沒有明確,那么就是Object以及任意的Java類了
B:? extends E
向下限定,E及其子類
C:? super E
向上限定,E及其父類
import java.util.ArrayList; import java.util.List; import net.allidea.bean.Person; import net.allidea.bean.Animal; public class Generic_5_demo { public static void main(String[] args) { // List> list = new ArrayList13_增強for的概述和使用*(); //當右邊泛型是不確定時,左邊可以指定為? ArrayList list1 = new ArrayList<>(); list1.add(new Person("張三",23)); list1.add(new Person("李四",24)); list1.add(new Person("王五",25)); ArrayList list2 = new ArrayList<>(); list2.add(new Animal("趙六",26)); list2.add(new Animal("田七",27)); list1.addAll(list2); //Animal繼承Person System.out.println(list1); } }
A:增強for概述——簡化數組和Collection集合的遍歷
B:格式:
for(元素數據類型 變量 : 數組或者Collection集合) { 使用變量即可,該變量就是元素 }
C:案例演示——數組,集合存儲元素用增強for遍歷
D:好處——簡化遍歷
import java.util.ArrayList; public class Foreach_1_demo { public static void main(String[] args) { int[] arr = {11,22,33,44,55,66}; for(int i : arr) { System.out.println(i); } ArrayList14_ArrayList存儲字符串和自定義對象并遍歷增強for版 *list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); for (String string : list) { System.out.println(string); } } }
ArrayList存儲字符串并遍歷增強for版
增強for循環底層依賴的是迭代器(Iterator)
public static void main(String[] args) { ArrayList15_三種迭代的能否刪除*list = new ArrayList<>(); list.add(new Person("張三",23)); list.add(new Person("李四",24)); list.add(new Person("王五",25)); list.add(new Person("趙六",26)); list.add(new Person("田七",27)); for (Person person : list) { System.out.println(person); } }
普通for循環,可以刪除,但是索引要--
迭代器,可以刪除,但是必須使用迭代器自身的remove方法,否則會出現并發修改異常
增強for循環不能刪除
public static void main(String[] args) { ArrayList16_靜態導入的概述和使用(了解)list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("d"); list.add("b"); //普通for循環刪除,索引要-- /*for (int i = 0; i < list.size(); i++) { if("b".equals(list.get(i))) { list.remove(i--); //通過索引刪除元素 } }*/ //迭代器刪除 /*Iterator it = list.iterator(); while(it.hasNext()) { if("b".equals(it.next())) { // list.remove("b"); //不能用集合的刪除方法,會報并發修改異常 it.remove(); } }*/ /*for(Iterator it2 = list.iterator(); it2.hasNext();) { if("b".equals(it2.next())) { it2.remove(); } }*/ //增強for循環,不能刪除,只能遍歷 for (String String : list) { if("b".equals(String)) { list.remove("b"); } } System.out.println(list); }
A:靜態導入概述
靜態導入時導入類中的靜態方法;
B:格式:
import static 包名….類名.方法名;
可以直接導入到方法的級別
C:注意事項
方法必須是靜態的,如果有多個同名的靜態方法,容易不知道使用誰?
這個時候要使用,必須加前綴。由此可見,意義不大,所以一般不用,但是要能看懂。
import static java.util.Arrays.sort; import static java.util.Arrays.*; public class StaticImport_2_demo { public static void main(String[] args) { int[] arr = {11,33,55,66,99,44}; sort(arr); //排序 System.out.println(Arrays.toString(arr)); } }17_可變參數的概述和使用*
A:可變參數概述
定義方法的時候不知道該定義多少個參數
B:格式
修飾符 返回值類型 方法名(數據類型… 變量名){}
C:注意事項:
這里的變量其實是一個數組
如果一個方法有可變參數,并且有多個參數,那么,可變參數肯定是最后一個
public class ChangeableArgs_3_demo { public static void main(String[] args) { int[] arr = {11,22,33,44,55}; // print(arr); print(11,22,33,44,55); System.out.println("------------"); print(0, arr); } /*public static void print(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } }*/ public static void print(int x,int ... arr) { //可變參數是一個數組 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }18_Arrays工具類的asList()方法的使用*
A:案例演示
Arrays工具類的asList()方法的使用
Collection中toArray(T[] a)泛型版的集合轉數組
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Demo4_Aslist { public static void main(String[] args) { // demo1(); // demo2(); //集合轉數組,加泛型的 ArrayList19_集合嵌套之ArrayList嵌套ArrayList*list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); String[] arr = list.toArray(new String[10]);//當集合轉換數組時,數組長度<=集合的size時,轉換后的數組等于集合的size for (String string : arr) { //如果數組的長度大于了size,分配的數組長度就和你指定的長度一樣 System.out.println(string); } } private static void demo2() { /*int[] arr = {11,22,33,44,55,66}; //將整個數組當做一個引用類型 List list = Arrays.asList(arr); //基本數據類型的數組轉換成集合,會將整個數組當作一個集合 System.out.println(list);*/ Integer[] arr = {11,22,33,44,55}; List list = Arrays.asList(arr); //將數組轉換成集合,數組必須是引用數據類型 System.out.println(list); } private static void demo1() { String[] arr = {"a","b","c","d","e","f","g"}; List list = Arrays.asList(arr); //將數組轉換成集合 list.add("h"); //不能添加 System.out.println(list); } }
A:案例演示
集合嵌套之ArrayList嵌套ArrayList
案例
學科——分若干個班級
學科是一個大集合
若干個班級分為每一個小集合
import java.util.ArrayList; import net.allidea.bean.Person; public class List_6_ArrayList { public static void main(String[] args) { ArrayList> list = new ArrayList<>(); ArrayList first = new ArrayList<>(); //創建第一個班級 first.add(new Person("楊冪",30)); first.add(new Person("胡歌",36)); first.add(new Person("郭富城",50)); first.add(new Person("周杰倫",38)); ArrayList second = new ArrayList<>(); second.add(new Person("黃曉明",31)); second.add(new Person("趙薇",31)); second.add(new Person("陳坤",31)); //將班級添加到學科集合中 list.add(first); list.add(second); //遍歷學科集合 for(ArrayList a : list) { for(Person p : a) { System.out.println(p); } } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77199.html
摘要:并把最終的隨機數輸出到控制臺。方法,在集合中如何存儲元素取決于方法的返回值返回,集合中只有一個元素。創建集合對象,傳入比較器。 1_HashSet存儲字符串并遍歷 A:Set集合概述及特點 通過API查看即可 B:案例演示 HashSet存儲字符串并遍歷 import java.util.HashSet; public class Demo1_HashSet { p...
摘要:不用自己來創建,而是通過池來獲取對象使用完后,調用的方法也不會真的關閉,而是把歸還給池連接池技術可以完成對象的再次利用接口為數據庫連接池提供了公共的接口各個廠商需要讓自己的連接池實現這個接口。 1.DButils工具類的介紹個三個核心類 A: 概述 DBUtils是java編程中的數據庫操作實用工具,小巧簡單實用。 DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少...
摘要:我的是忙碌的一年,從年初備戰實習春招,年三十都在死磕源碼,三月份經歷了阿里五次面試,四月順利收到實習。因為我心理很清楚,我的目標是阿里。所以在收到阿里之后的那晚,我重新規劃了接下來的學習計劃,將我的短期目標更新成拿下阿里轉正。 我的2017是忙碌的一年,從年初備戰實習春招,年三十都在死磕JDK源碼,三月份經歷了阿里五次面試,四月順利收到實習offer。然后五月懷著忐忑的心情開始了螞蟻金...
摘要:布爾值布爾值和布爾代數的表示完全一致,一個布爾值只有兩種值的數據類型可以通過內置的函數查詢,例如還可以用來判斷和的區別在于不會認為子類是一種父類類型。會認為子類是一種父類類型。基本功能是進行成員關系測試和刪除重復元素。 ...
閱讀 2689·2023-04-25 20:28
閱讀 1871·2021-11-22 09:34
閱讀 3703·2021-09-26 10:20
閱讀 1857·2021-09-22 16:05
閱讀 3098·2021-09-09 09:32
閱讀 2530·2021-08-31 09:40
閱讀 2111·2019-08-30 13:56
閱讀 3328·2019-08-29 17:01