教老婆學Java 系列之奇妙的資料結構二
阿新 • • 發佈:2018-12-22
奇妙的資料結構(容器)二
陣列與集合
問題:如何將多個數組放入到一個集合中。
如何將多個人陣列放入到一個集合中,沒有重複的資料。
package Day03;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 將這四個數組合成一個集合
* 要求
* 集合1.所有數都存在
* 集合2.沒有重複的數
* 優化前:把有蘋果的筐放在車上整體傳給方法,然後用方法先把原來車上筐裡的蘋果取出來再放在另外一輛車上
* 優化後:把有蘋果的筐和空車都傳給方法,然後用方法把筐裡的蘋果倒出來放在車上
*/
public class Test {
//複雜的處理
/*public void tryss(List<String[]> data){
List<String> list = new ArrayList<>();
for (int i = 0; i <data.size(); i++) {
String[] ss = data.get(i);
for (int j = 0; j <ss.length ; j++) {
list.add(ss[j]);
}
}
System.out.println(list);
List<String> newList = new ArrayList<>();
for (String s: list) {
if (!newList.contains(s)){
newList.add(s);
}
}
System.out.println(newList);
}*/
public void add(String[] data,List<String> list){
for (String a: data) {
list.add(a);
}
}
public void addNoSame(String[] data,Set<String> set){
for (String a:data) {
set.add(a);
}
}
public static void main (String[] args) {
//複雜處理的呼叫方法
/* List<String[]> list = new ArrayList<>();
String[] a = {"qwe","123","234"};
String[] b = {"asd","123","435"};
String[] c = {"sdfg","435","767"};
String[] d = {"qwsdfe","asd","qwe"};
list.add(a);
list.add(b);
list.add(c);
list.add(d);
Test test = new Test();
test.tryss(list);*/
String[] a = {"qwe","123","234"};
String[] b = {"asd","123","435"};
String[] c = {"sdfg","435","767"};
String[] d = {"qwsdfe","asd","qwe"};
List<String> list = new ArrayList<>();
Set<String> set = new HashSet<>();
Test test = new Test();
test.add(a,list);
test.add(b,list);
test.add(c,list);
test.add(d,list);
test.addNoSame(a,set);
test.addNoSame(b,set);
test.addNoSame(c,set);
test.addNoSame(d,set);
System.out.println(list);
System.out.println(set);
}
}
這裡想說的是ArrayList是可以有重複資料的,HashSet是根據雜湊值計算,不能有重複的內容
另外一點,就是資料結構(容器)實際上跟方法可以解耦,方法改變這個資料結構後,不用返
回,資料就在那裡。方法只是對這些資料做處理,這個在遞迴時候很有用。
問題二:將陣列內容進行反轉
/**
* 陣列 ["aasd","asds","sasdf","ert","567","6678","453","1232","90p90"] 將陣列倒序反轉
* ["aasd","asds","sasdf","ert","567","6678","453","1232"]
*
*
*/
public class Demo1 {
public void test1(){
String[] arr ={"aasd","asds","sasdf","ert","567","6678","453","1232","90p90"};
System.out.println(arr.length);
for (int i = 0; i <arr.length/2+1; i++) {
String temp = arr[arr.length/2+i];
arr[arr.length/2+i] = arr[arr.length/2-i];
arr[arr.length/2-i] = temp;
}
for (String a: arr) {
System.out.println(a);
}
}
public void test2(){
String[] arrs ={"aasd","asds","sasdf","ert","567","6678","453","1232","90p90"};
List<String> list = new ArrayList<>();
for (int i = arrs.length-1; i >=0 ; i--) {
list.add(arrs[i]);
}
System.out.println(list);
}
public void test3(String[] arr){
if (arr.length%2 == 1){
for (int i = 0; i <arr.length/2+1; i++) {
String temp = arr[arr.length/2+i];
arr[arr.length/2+i] = arr[arr.length/2-i];
arr[arr.length/2-i] = temp;
}
for (String a: arr) {
System.out.println(a);
}
}else if (arr.length%2 != 1){
String temp = arr[arr.length/2-1];
arr[arr.length/2-1]=arr[arr.length/2];
arr[arr.length/2]=temp;
for (int i = 1; i <arr.length/2 ; i++) {
String temps = arr[arr.length/2+i];
arr[arr.length/2+i] = arr[arr.length/2-i-1];
arr[arr.length/2-i-1] = temps;
}
for (String a: arr) {
System.out.println(a);
}
}
}
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
String[] arr ={"aasd","asds","sasdf","ert","567","6678","453","1232","kkoko"};
demo1.test3(arr);
}
}
這裡主要是想說:怎麼去思考這個問題,有很多種方式。只要有思路就一定能做出來。測試通過就可以了
開發有時候很難,一旦心裡戒備打開了,就不難了。
問題三:如圖,前端需要根據你返回的資料作曲線圖,記住,我只要資料,不要漢字。
這裡是想引導對所有的資料結構進行一個篩選,看哪一個更適合,最後選擇二維陣列。