1. 程式人生 > >教老婆學Java 系列之奇妙的資料結構二

教老婆學Java 系列之奇妙的資料結構二

奇妙的資料結構(容器)二

陣列與集合

問題:如何將多個數組放入到一個集合中。
如何將多個人陣列放入到一個集合中,沒有重複的資料。

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);
    }

}

這裡主要是想說:怎麼去思考這個問題,有很多種方式。只要有思路就一定能做出來。測試通過就可以了
開發有時候很難,一旦心裡戒備打開了,就不難了。

問題三:如圖,前端需要根據你返回的資料作曲線圖,記住,我只要資料,不要漢字。

成績資料
這裡是想引導對所有的資料結構進行一個篩選,看哪一個更適合,最後選擇二維陣列。