package com.vortex.test.type;
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)公司、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了泉山免費(fèi)建站歡迎大家使用!
public class ArrayUtilE {
/**
*
* @param arr 需要改變的數(shù)組
* @param index 需要改變的下標(biāo)
* @param newValue 新的值
* E 泛型: 數(shù)組對象類型:例如 String、Integer或者自定義對象類型
* @return
*/
public E[] chageValue(E[] arr,int index,E newValue){
try{
arr[index] = newValue;
}catch(Exception e){
System.out.println(e.getMessage());
}
return arr;
}
public static void main(String[] args) {
ArrayUtilString au = new ArrayUtilString();
String[] arr = {"1","2","3","4"};
System.out.println("修改前");
for(int i=0;iarr.length;i++){
String val = arr[i];
System.out.println("第"+i+"個元素 為"+val);
}
arr = au.chageValue(arr, 0, "100");
System.out.println("修改后");
for(int i=0;iarr.length;i++){
String val = arr[i];
System.out.println("第"+i+"個元素 為"+val);
}
ArrayUtilUser user_au = new ArrayUtilUser();
User[] user_arr = {new User("張三",22),new User("李四",23),new User("王五",21)};
System.out.println("修改前");
for(int i=0;iuser_arr.length;i++){
User u = user_arr[i];
System.out.println("第"+i+"個元素 name="+u.getName()+" age="+u.getAge());
}
user_arr = user_au.chageValue(user_arr, 0, new User("趙六",25));
System.out.println("修改后");
for(int i=0;iuser_arr.length;i++){
User u = user_arr[i];
System.out.println("第"+i+"個元素 name="+u.getName()+" age="+u.getAge());
}
}
}
class User{
private String name;
private int age;
public User(String name, int age) {
super();
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;
}
}
1、什么是ArrayList :
ArrayList就是傳說中的動態(tài)數(shù)組,用MSDN中的說法,就是Array的復(fù)雜版本,它提供了如下一些好處:
(1)動態(tài)的增加和減少元素
(2)實(shí)現(xiàn)了ICollection和IList接口
(3)靈活的設(shè)置數(shù)組的大小
2、ArrayLis的創(chuàng)建以及增刪改查方法:
(1)ArrayList的創(chuàng)建以及元素的添加:
ArrayList 變量名?=?new?ArrayList();?//()中也可傳參。
注釋:上面是創(chuàng)建一個空的ArrayList列表。當(dāng)我們想往列表中傳遞元素的時候是通過.add()的方法來進(jìn)行賦值的??匆幌孪旅娴陌咐A硗庖胼敵龀隽斜碇械脑氐脑捯ㄟ^for循環(huán)遍歷:
public?class?test?{
public?static?void?main(String[]?args)?{
ArrayList?lis?=?new?ArrayList();
lis.add("tony");
lis.add("tom");
lis.add("jack");
lis.add("mary");
lis.add("even");
for(int?i=0;ilis.size();i++){
String?result?=?(String)lis.get(i);
System.out.println(result);
}
輸出結(jié)果如下:
tony
tom
jack
mary
even
(2)ArrayList中元素的刪除:
注釋:變量名.remove(int Index); //通過.remove(int Index)方法來進(jìn)行刪除。
這里直接傳入要刪除元素的下標(biāo)即可。當(dāng)然也可以直接傳入值進(jìn)行刪除。如果你覺得用下邊的方式比較麻煩那可以直接輸入要刪除項(xiàng)的值。
package?com.java.demo_9;
import?java.util.ArrayList;
public?class?Arraylist?{
public?static?void?main(String[]?args)?{
ArrayList?lis?=?new?ArrayList();
lis.add("tony");
lis.add("tom");
lis.add("jack");
lis.add("mary");
lis.add("even");
System.out.println("---------------------------------");
System.out.println("ArrayList原列表元素:");
for?(int?i?=?0;?i??lis.size();?i++)?{
String?result?=?(String)?lis.get(i);
System.out.println(result);
}
System.out.println("---------------------------------");
System.out.println("刪除元素后的ArrayList列表:");
lis.remove(1);
for?(int?i?=?0;?i??lis.size();?i++)?{
String?result?=?(String)?lis.get(i);
System.out.println(result);
}
System.out.println("---------------------------------");
}
}
結(jié)果:
因?yàn)槲抑付ǖ氖莑is.remove(1);
index是從0開始起始的因此1代表第2個元素。因此刪除的是tom這個元素。
ArrayList原列表元素:
tony
tom
jack
mary
even
---------------------------------
刪除元素后的ArrayList列表:
tony
jack
mary
even
---------------------------------
(3)ArrayList中元素的修改注釋:
ArrayList方法中有一個.set方法(變量.set(index, element);)。
通過這個方法可以修改列表中的值。(index指定下標(biāo),element指定要修改后元素的值)。一起來看一下下面的示例:
package?com.java.demo_9;
import?java.util.ArrayList;
public?class?Arraylist?{
public?static?void?main(String[]?args)?{
ArrayList?lis?=?new?ArrayList();
lis.add("tony");
lis.add("tom");
lis.add("jack");
lis.add("mary");
lis.add("even");
System.out.println("---------------------------------");
System.out.println("ArrayList原列表元素:");
for?(int?i?=?0;?i??lis.size();?i++)?{
String?result?=?(String)?lis.get(i);
System.out.println(result);
}
System.out.println("---------------------------------");
System.out.println("修改后的ArrayList列表:");
//lis.remove("tom");
lis.set(2,?"lucy");
for?(int?i?=?0;?i??lis.size();?i++)?{
String?result?=?(String)?lis.get(i);
System.out.println(result);
}
System.out.println("---------------------------------");
}
}
結(jié)果:
通過下面的結(jié)果可以看出第3個下標(biāo)中的值已經(jīng)被改變了。本來是jack現(xiàn)在更改成了lucy。
ArrayList原列表元素:
tony
tom
jack
mary
even
---------------------------------
修改后的ArrayList列表:
tony
tom
lucy
mary
even
---------------------------------
(4)ArrayList中元素的查找:
注釋:.contains()是用來判斷一個元素是否包含在另一個元素中的。
所以這里是判斷查找的元素是否包含在列表中。返回值方面我直接用的是打印的方法。也可以通過boolean,return的方式返回。
案例1:
import?java.util.ArrayList;
public?class?tes?{
public?static?void?main(String[]?args)?{
ArrayList?lis?=?new?ArrayList();
lis.add("tony");
lis.add("tom");
lis.add("jack");
lis.add("mary");
lis.add("even");
if(lis.contains("vivian")){
System.out.println("包含此元素!");
}
else{
System.out.println("該元素不存在!");
}
}
}
結(jié)果:
返回結(jié)果參照代碼。找到了就打印“包含此元素,沒找到就顯示元素不存在。
案例2:
package?com.java.demo_9;
import?java.util.ArrayList;
public?class?ArrLis?{
public?static?void?main(String[]?args)?{
ArrayList?list?=new?ArrayList();
list.add("tony");
list.add("tom");
list.add("jack");
list.add("kevin");
for(int?i=0;ilist.size();i++){
String?result?=(String?)list.get(i);
System.out.println(result);
}
System.out.println("+++++++++++++++++++++++++++++++++++++");
ArrayList?list1?=?new?ArrayList();
for(int?i=0;ilist.size();i++){
String?res?=?(String)list.get(i);
if(list.contains("kevin")){
list1.add("kevin");
System.out.println(list1);
break;
}else{
System.out.println("沒找到該元素!");
break;
}
}
}
}
結(jié)果:
因?yàn)榱斜碇兄邪?kevin"這個元素所以返回值為該元素。如果列表中沒有該元素返回值為“沒有找到該元素!”。
注意事項(xiàng):我是重新設(shè)定了一個新空ArrayList(list1)。目的就是為了如果找到該值把這個值直接放到新的ArrayList中。另外if,else用了2次break。就是只要找到或者沒找到就退出的意思。如果不這么寫那么for循環(huán)每找一次結(jié)果就會打印一次,這顯然是不必要的。
可以使用如下的代碼:
arrays.aslist(yourarray).contains(yourvalue)
但這并不適用于基本數(shù)據(jù)類型的數(shù)組。
在java8之后,你可以使用stream來檢測int,double,long類型的數(shù)組是否包含某個數(shù)值。(分別用intstream,
doublestream和longstream),例如:
int[]
a
=
{1,2,3,4};
boolean
contains
=
intstream.of(a).anymatch(x
-
x
==
4);
對于數(shù)組的一些操作,你可以上秒秒學(xué)了解相關(guān)的知識。
配合內(nèi)存分布圖
當(dāng)沒有注釋的代碼時,此時在main方法中調(diào)用change方法,然后將數(shù)組作為參數(shù)傳遞,此時傳遞的是地址值。雖然main方法中的arr和change方法參數(shù)里的arr看似名稱一致,但是實(shí)際在棧中會有兩份。就和上圖一樣。
本來main方法中的arr就是指向0x1122地址的數(shù)組,然后將這個地址賦給了change方法參數(shù)里的arr,所以此時change方法里的arr也指向了0x1122地址的數(shù)組。所以如果對這個數(shù)組里的內(nèi)容進(jìn)行改動,通過兩個arr訪問都是一樣的。所以通過change改動數(shù)組內(nèi)容,main方法中也能夠看到修改后的內(nèi)容
如果加上注釋的那一行代碼。因?yàn)橹匦耼ew一個新的數(shù)組,然后將其地址值改成了0x3344,所以change方法里的arr不再指向0x1122,所以你無論怎么修改內(nèi)部數(shù)據(jù),和main方法中的arr也沒有關(guān)系
如上做一個簡單的總結(jié)
就比如有兩個人共用一個衛(wèi)生間。一個人很邋遢給廁所里搞得很臟,另一個人進(jìn)去就能看到廁所很臟
如果兩個人各有一個衛(wèi)生間。一個人哪怕在廁所生火做飯,另一個人也看不到
public static void main(String[] args){ /** * 1、Java定義一個一維數(shù)組,并給每個元素賦值為數(shù)組下標(biāo)的值,并顯示 */ int[] arr = new int[10]; for (int i = 0; i arr.length; i++){ arr[i] = i; System.out.println(i + "," + arr[i]); }} public static void main(String[] args){ /** * 2、修改上述程序,將數(shù)組的賦值改為從鍵盤上輸入的10個整數(shù) */ int[] arr = new int[10]; System.out.println("請依次輸入10個整數(shù)"); for (int i = 0; i arr.length; i++){ System.out.println("請輸入第" + (i + 1) + "個整數(shù):"); Scanner input = new Scanner(System.in); arr[i] = Integer.parseInt(input.nextLine()); } for (int i = 0; i arr.length; i++){ System.out.println(i + "," + arr[i]); } /** * 3、修改上述程序,添加代碼,實(shí)現(xiàn)從10個數(shù)中找到最大值和最小值,并顯示。 */ int max = arr[0]; // 將數(shù)組的第一個元素賦給max int min = arr[0]; // 將數(shù)組的第一個元素賦給min for (int i = 1; i arr.length; i++){ // 從數(shù)組的第二個元素開始賦值,依次比較 if (arr[i] max){ // 如果arr[i]大于最大值,就將arr[i]賦給最大值 max = arr[i]; } if (arr[i] min){ // 如果arr[i]小于最小值,就將arr[i]賦給最小值 min = arr[i]; } } System.out.println("最大值是:" + max); System.out.println("最小值是:" + min); /** * 4、修改上述程序,添加代碼,去掉最大值和最小值,然后計算剩下的數(shù)的平均值,并顯示 */ int sum = 0; for (int i = 0; i arr.length; i++){ sum += arr[i]; } sum = sum - max - min; // 去掉最大值和最小值的總和 double average = sum / (arr.length - 2); System.out.println("平均值:" + average);}