大数据---Java集合

知识点1:二叉树

 1 package com.atguigu.javase.tree;
 2 
 3 class Tree {
 4 
 5     private class TreeNode {
 6         int value;
 7         TreeNode left;
 8         TreeNode right;
 9     }
10 
11     private TreeNode root; // 根引用
12 
13     public void add(int n) {
14         TreeNode newNode = new TreeNode();
15         newNode.value = n;
16         if (root == null) { // 树为空
17             root = newNode;
18         } else {
19             insert(root, newNode);
20         }
21     }
22 
23     public void insert(TreeNode target, TreeNode newNode) {
24         if (newNode.value < target.value) { // 新结点比目标小, 向左走
25             if (target.left == null) {
26                 target.left = newNode;
27             } else {
28                 insert(target.left, newNode);
29             }
30         } else { // 向右走
31             if (target.right == null) {
32                 target.right = newNode;
33             } else {
34                 insert(target.right, newNode);
35             }
36         }
37     }
38 
39     public void view(TreeNode node) {
40         if (node == null) {
41             return;
42         }
43         view(node.left);
44         System.out.println(node.value);
45         view(node.right);
46     }
47 
48     public void travel() {
49         view(root);
50     }
51 }
52 
53 public class TreeTest {
54 
55     public static void main(String[] args) {
56         Tree tree = new Tree();
57         tree.add(20);
58         tree.add(10);
59         tree.add(50);
60         tree.add(80);
61         tree.add(5);
62         tree.add(2);
63         tree.add(9);
64 
65         tree.travel();
66 
67     }
68 }

知识点2:Set和List集合

  1 package com.atguigu.javase.collection;
  2 
  3 import org.junit.Test;
  4 
  5 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
  6 import java.util.*;
  7 
  8 /**
  9  * 集合 : 解决批量对象的存储问题.
 10  * 简单地看作是一个可变长度的Object[]. 是一个长度可变的容器.
 11  * Collection : 保存一个一个的对象
 12  *      无序可重复. 无序 : 不按添加顺序保存元素, 可重复 : 重复的对象可以多次添加.
 13  *      boolean add(Object obj) 添加元素, 返回值表示添加成功或失败
 14  *      boolean contains(Object obj) 判断当前集合中是否包含参数中的对象
 15  *      boolean remove(Object obj) 删除指定的元素
 16  *      int size() 返回元素个数
 17  *
 18  *      Set : 保存一个一个的对象, 无序不可重复
 19  *          HashSet : 使用哈希算法实现的Set集合.
 20  *              去重规则 : 两个对象的equals为true, 两个对象的hashCode也必须相等.
 21  *
 22  *          TreeSet : 基于二叉搜索树实现的Set集合. 内部要实现自然排序, 如果提供了比较器,它就会定制排序.
 23  *              去重规则 : 两个对象的compare为0.
 24  *
 25  *      List : 保存一个一个的对象, 有序可重复
 26  *          void add(int index, Object ele). 在指定下标位置处插入新元素
 27  *          Object get(int index) 返回指定下标处的元素
 28  *          Object remove(int index) 删除指定下标处的元素
 29  *          Object set(int index, Object ele) 替换指定下标处的元素为参数ele. 旧元素作为返回值.
 30  *
 31  *          ArrayList : 基于数组实现的List集合
 32  *          Vector : 和ArrayList等价.
 33  *          LinkedList : 基于链表实现的List集合.
 34  *
 35  * Map : 保存一对一对的对象
 36  *
 37  */
 38 
 39 class Student implements Comparable {
 40 
 41     private int id;
 42     private String name;
 43     private int grade;
 44     private double score;
 45 
 46     public Student() {}
 47 
 48     public Student(int id, String name, int grade, double score) {
 49         this.id = id;
 50         this.name = name;
 51         this.grade = grade;
 52         this.score = score;
 53     }
 54 
 55     public int getId() {
 56         return id;
 57     }
 58 
 59     public void setId(int id) {
 60         this.id = id;
 61     }
 62 
 63     public String getName() {
 64         return name;
 65     }
 66 
 67     public void setName(String name) {
 68         this.name = name;
 69     }
 70 
 71     public int getGrade() {
 72         return grade;
 73     }
 74 
 75     public void setGrade(int grade) {
 76         this.grade = grade;
 77     }
 78 
 79     public double getScore() {
 80         return score;
 81     }
 82 
 83     public void setScore(double score) {
 84         this.score = score;
 85     }
 86 
 87     @Override
 88     public String toString() {
 89         return "Student{" +
 90                 "id=" + id +
 91                 ", name='" + name + '\'' +
 92                 ", grade=" + grade +
 93                 ", score=" + score +
 94                 '}';
 95     }
 96 
 97     @Override
 98     public boolean equals(Object o) {
 99         if (this == o) return true;
100         if (o == null || getClass() != o.getClass()) return false;
101         Student student = (Student) o;
102         return id == student.id &&
103                 grade == student.grade &&
104                 Double.compare(student.score, score) == 0 &&
105                 Objects.equals(name, student.name);
106     }
107 
108     @Override
109     public int hashCode() {
110         return Objects.hash(id, name, grade, score);
111     }
112 
113     @Override
114     public int compareTo(Object o) throws RuntimeException {
115         if (!(o instanceof Student)) {
116             throw new RuntimeException("对象不可比");
117         }
118         int n = (int)(this.score - ((Student)o).score);
119         if (n == 0) {
120             n = 1;
121         }
122         return n;
123     }
124 
125 }
126 
127 // 写一个比较器, 用于完成两个学生对象的比较
128 class MyComparator implements Comparator {
129 
130     @Override
131     public int compare(Object o1, Object o2) {
132         if (!(o1 instanceof Student) || !(o2 instanceof Student)) {
133             throw new RuntimeException("对象不可比");
134         }
135         return -(((Student)o1).getGrade() - ((Student)o2).getGrade());
136     }
137 }
138 
139 public class CollectionTest {
140 
141     @Test
142     public void test7() {
143         MyComparator myComparator = new MyComparator();
144         Set set = new TreeSet(myComparator); // 通过构造器传递对象, 99.9%的情况是对象关联.
145         Student s1 = new Student(1,"小明", 5, 80);
146         Student s2 = new Student(2,"小花", 4, 90);
147         Student s3 = new Student(3,"小伟", 2, 100);
148         Student s4 = new Student(4,"小芳", 1, 90);
149         Student s5 = new Student(5,"小丽", 6, 50);
150 
151         set.add(s1);
152         set.add(s2);
153         set.add(s3);
154         set.add(s4);
155         set.add(s5);
156 
157         for (Object tmp : set) {
158             System.out.println(tmp);
159         }
160 
161         System.out.println("*************************************");
162         // 1) 遍历谁, 就向谁要迭代器.
163         Iterator iterator = set.iterator();
164         // 使用注意事项1 : 迭代器要趁热使用
165         // set.remove(s1); 不要随意再修改集合的内容, 否则迭代器会出问题.
166         // 2) 循环依次询问当前游标后面有无元素, 如果有, 返回true
167         while (iterator.hasNext()) {
168             // 真的获取到后面的元素, 并且会引发内部游标的下移
169             Object obj = iterator.next();
170             // next()在循环中必须只调用一次.
171             System.out.println(obj);
172         }
173         // 使用注意事项 : 迭代器是一次性使用, 用完作废.
174 
175     }
176 
177     @Test
178     public void test6() {
179         Set set = new TreeSet();
180         Student s1 = new Student(1,"小明", 5, 80);
181         Student s2 = new Student(2,"小花", 4, 90);
182         Student s3 = new Student(3,"小伟", 2, 100);
183         Student s4 = new Student(4,"小芳", 1, 90);
184         Student s5 = new Student(5,"小丽", 6, 50);
185 
186         set.add(s1);
187         set.add(s2);
188         set.add(s3);
189         set.add(s4);
190         set.add(s5);
191 
192         for (Object tmp : set) {
193             System.out.println(tmp);
194         }
195     }
196 
197     @Test
198     public void test5() {
199         Set set = new TreeSet();
200         //set.add(20);
201         //set.add(5);
202         //set.add(2);
203         //set.add(10);
204         set.add("cc");
205         set.add("bb");
206         set.add("aa");
207         //set.add(30);
208 
209         for (Object tmp : set) {
210             System.out.println(tmp);
211         }
212     }
213 
214     @Test
215     public void test4() {
216         Set set = new TreeSet();
217         set.add(20);
218         set.add(5);
219         set.add(2);
220         set.add(10);
221         set.add(80);
222         set.add(60);
223         set.add(5);
224 
225         for (Object tmp : set) {
226             System.out.println(tmp);
227         }
228     }
229 
230     @Test
231     public void test3() {
232         Set set = new HashSet(); // 无序不可重复
233         Student s1 = new Student(1, "小明", 3, 80);
234         Student s2 = new Student(2, "小丽", 2, 90);
235         Student s3 = new Student(1, "小明", 3, 80);
236 
237         set.add(s1);
238         set.add(s2);
239         set.add(s3);
240         set.add(s1);
241 
242         for (Object obj : set) {
243             System.out.println(obj);
244         }
245     }
246 
247     // 创建一个List集合, 保存10个20以内的随机整数.
248     @Test
249     public void exer3() {
250         List list = new ArrayList();
251         for (int i = 0; i < 10; i++) {
252             int n = (int)(Math.random() * 20);
253             list.add(n);
254         }
255         // 遍历
256         for (int i = 0; i < list.size(); i++) {
257             Object o = list.get(i);
258             System.out.println(o);
259         }
260     }
261 
262     // 创建一个List集合, 保存10个20以内的随机整数, 不要重复的.
263     @Test
264     public void exer4() {
265         List list = new ArrayList();
266         for (int i = 0; i < 10; i++) {
267             int n = (int)(Math.random() * 20);
268             if (list.contains(n)) {
269                 i--;
270                 continue;
271             }
272             list.add(n);
273         }
274 
275         for (Object tmp : list) {
276             System.out.println(tmp);
277         }
278     }
279 
280     @Test
281     public void exer42() {
282         List list = new ArrayList();
283         while (list.size() != 10) {
284             int n = (int)(Math.random() * 20);
285             if (!list.contains(n)) {
286                 list.add(n);
287             }
288         }
289 
290         for (Object tmp : list) {
291             System.out.println(tmp);
292         }
293     }
294 
295     @Test
296     public void exer43() {
297         List list = new ArrayList();
298         for (int i = 0; i < 10;) {
299             int n = (int)(Math.random() * 20);
300             if (!list.contains(n)) {
301                 list.add(n);
302                 i++;
303             }
304         }
305 
306         for (Object tmp : list) {
307             System.out.println(tmp);
308         }
309     }
310 
311     @Test
312     public void test2() {
313         List list = new ArrayList();
314         list.add("abc");
315         list.add("yyy");
316         list.add(new Integer(200));
317         list.add("abc");
318         list.add(200);
319         list.add(new Student(2, "小丽", 1, 50));
320         System.out.println(list);
321         list.add(2, "我是汉字"); // 插入
322         list.add(1, 3);
323         System.out.println(list);
324         Object o = list.get(7);
325         System.out.println(o);
326         list.remove(3); // 整数会优先作为下标来使用
327         list.remove(Integer.valueOf(3)); // 删除对象
328         System.out.println(list); //[abc, yyy, 200, abc, 200, Student{id=2, name='小丽', grade=1, score=50.0}]
329         list.set(3, 3.14); // 替换操作
330         System.out.println(list);
331         System.out.println("*************************************");
332         for (int i = 0; i < list.size(); i++) {
333             Object o1 = list.get(i);
334             System.out.println(o1);
335         }
336 
337     }
338 
339     // 创建一个Set集合, 保存10个20以内的随机整数.
340     @Test
341     public void exer1() {
342         Set set = new HashSet();
343         for (int i = 0; i < 10; i++) {
344             set.add((int)(Math.random() * 20));
345         }
346         // 遍历集合
347         for (Object tmp : set) {
348             System.out.println(tmp);
349         }
350     }
351     // 创建一个Set集合, 保存10个20以内的随机整数. 保证10个.
352     @Test
353     public void exer12() {
354         Set set = new HashSet();
355         while (set.size() != 10) {
356             set.add((int)(Math.random() * 20));
357         }
358         // 遍历集合
359         for (Object tmp : set) {
360             System.out.println(tmp);
361         }
362     }
363 
364     @Test
365     public void exer13() {
366         Set set = new HashSet();
367         for (int i = 0; i < 10; i++) {
368             int n = (int)(Math.random() * 20);
369             if (!set.add(n)) {
370                 i--;
371             }
372         }
373     }
374 
375     @Test
376     public void exer14() {
377         Set set = new HashSet();
378         for (int i = 0; i < 10; ) {
379             int n = (int)(Math.random() * 20);
380             if (set.add(n)) {
381                 i++;
382             }
383         }
384     }
385 
386     public static void main(String[] args) {
387         Set set = new HashSet(); // Set : 无序不可重复
388         set.add("abc");
389         set.add("yyy");
390         set.add(new Integer(200));
391         set.add(100); // set.add(Integer.valueOf(100));
392         set.add(new Student(1, "小明", 2, 80));
393         boolean b1 = set.add("yyy");
394         boolean b2 = set.add(200);
395         System.out.println(b1);
396         System.out.println(b2);
397 
398         System.out.println(set.size());
399 
400         System.out.println(set);
401 
402         System.out.println("***************************************");
403         // 遍历集合.
404         for (Object tmp : set) {
405             System.out.println(tmp);
406         }
407 
408         boolean contains = set.contains(200); // 判断是否包含
409         System.out.println("contains = " + contains);
410 
411         set.remove(100); // 删除
412 
413         System.out.println(set);
414     }
415 }
 1 package com.atguigu.javase.collection;
 2 
 3 import java.util.Comparator;
 4 import java.util.HashSet;
 5 import java.util.Set;
 6 import java.util.TreeSet;
 7 
 8 public class SetExer {
 9 
10     public static void main(String[] args) {
11         Set set = new TreeSet(new Comparator() {
12                                     @Override
13                                     public int compare(Object o1, Object o2) {
14                                         return (int)(((Person)o1).getWeight() - ((Person)o2).getWeight());
15                                     }
16                              });
17 
18         Person p1 = new Person("张三", 30, "男", 90);
19         Person p2 = new Person("李四", 40, "女", 50);
20         Person p3 = new Person("王五", 10, "男", 70);
21         Person p4 = new Person("王六", 50, "男", 30);
22 
23         set.add(p1);
24         set.add(p2);
25         set.add(p3);
26         set.add(p4);
27 
28         for (Object obj : set) {
29             System.out.println(obj);
30         }
31     }
32 
33     public static void main3(String[] args) {
34         Person p1 = new Person("张三", 30, "男", 90);
35         Person p2 = new Person("李四", 40, "女", 50);
36         Person p3 = new Person("王五", 10, "男", 70);
37 
38         Set set = new TreeSet();
39         set.add(p1);
40         set.add(p2);
41         set.add(p3);
42 
43         for (Object obj : set) {
44             System.out.println(obj);
45         }
46     }
47 
48     public static void main2(String[] args) {
49         // 写一个类Person, name,age,gender, 创建几个对象, 有内容相同的对象, 添加到HashSet集合中
50         // 如果想让HashSet帮助去重, 怎么做???
51         Person p1 = new Person("张三", 30, "男", 20);
52         Person p2 = new Person("李四", 40, "女", 70);
53         Person p3 = new Person("张三", 30, "男", 30);
54 
55         Set hashSet = new HashSet();
56         hashSet.add(p1);
57         hashSet.add(p2);
58         hashSet.add(p3);
59 
60         for (Object obj : hashSet) {
61             System.out.println(obj);
62         }
63     }
64 }

知识点3:经典for和增强for

 1 package com.atguigu.javase.collection;
 2 
 3 public class ForTest {
 4 
 5     public static void main(String[] args) {
 6         int[] arr = new int[8];
 7         for (int i = 0; i < arr.length; i++) {
 8             arr[i] = (int)(Math.random() * 20);
 9         }
10         // 遍历
11         for (int i = 0; i < arr.length; i++) {
12             int tmp = arr[i];
13             //tmp *= 10;
14             System.out.print(tmp + " ");
15         }
16         System.out.println();
17 
18         for (int i = 0; i < arr.length; i++) {
19             int tmp = arr[i];
20             System.out.print(tmp + " ");
21         }
22         System.out.println();
23 
24         /////////////////////////////////////////////////////
25         // 遍历, 增强for, 为了遍历数组更安全, 更简单.
26         /*
27         for (元素数据类型 临时变量 : 数组名) {
28             访问临时变量;
29         }*/
30         for (int tmp : arr) {
31             //tmp *= 10;
32             System.out.print(tmp + " ");
33         }
34         System.out.println();
35 
36         char[] arr2 = {'a', '2', '5'};
37         for (char ch : arr2) {
38             System.out.println(ch);
39         }
40     }
41 }

知识点4:Hashset 和TreeSet

 1 package com.atguigu.javase.collection;
 2 
 3 import java.util.Comparator;
 4 import java.util.HashSet;
 5 import java.util.Set;
 6 import java.util.TreeSet;
 7 
 8 public class SetExer {
 9 
10     public static void main(String[] args) {
11         Set set = new TreeSet(new Comparator() {
12                                     @Override
13                                     public int compare(Object o1, Object o2) {
14                                         return (int)(((Person)o1).getWeight() - ((Person)o2).getWeight());
15                                     }
16                              });
17 
18         Person p1 = new Person("张三", 30, "男", 90);
19         Person p2 = new Person("李四", 40, "女", 50);
20         Person p3 = new Person("王五", 10, "男", 70);
21         Person p4 = new Person("王六", 50, "男", 30);
22 
23         set.add(p1);
24         set.add(p2);
25         set.add(p3);
26         set.add(p4);
27 
28         for (Object obj : set) {
29             System.out.println(obj);
30         }
31     }
32 
33     public static void main3(String[] args) {
34         Person p1 = new Person("张三", 30, "男", 90);
35         Person p2 = new Person("李四", 40, "女", 50);
36         Person p3 = new Person("王五", 10, "男", 70);
37 
38         Set set = new TreeSet();
39         set.add(p1);
40         set.add(p2);
41         set.add(p3);
42 
43         for (Object obj : set) {
44             System.out.println(obj);
45         }
46     }
47 
48     public static void main2(String[] args) {
49         // 写一个类Person, name,age,gender, 创建几个对象, 有内容相同的对象, 添加到HashSet集合中
50         // 如果想让HashSet帮助去重, 怎么做???
51         Person p1 = new Person("张三", 30, "男", 20);
52         Person p2 = new Person("李四", 40, "女", 70);
53         Person p3 = new Person("张三", 30, "男", 30);
54 
55         Set hashSet = new HashSet();
56         hashSet.add(p1);
57         hashSet.add(p2);
58         hashSet.add(p3);
59 
60         for (Object obj : hashSet) {
61             System.out.println(obj);
62         }
63     }
64 }

 

posted @ 2020-07-15 18:01  浪子逆行  阅读(2)  评论(0)    收藏  举报