奇妙的数据结构(容器)二
数组与集合
问题:如何将多个数组放入到一个集合中。
如何将多个人数组放入到一个集合中,没有重复的数据。
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);
}
}
这里主要是想说:怎么去思考这个问题,有很多种方式。只要有思路就一定能做出来。测试通过就可以了
开发有时候很难,一旦心里戒备打开了,就不难了。
问题三:如图,前端需要根据你返回的数据作曲线图,记住,我只要数据,不要汉字。
这里是想引导对所有的数据结构进行一个筛选,看哪一个更适合,最后选择二维数组。