JAVA基础 -集合
/** * 列表 ArrayList,LinkedList * 1、值列表和对象列表 contains与indexOf测试 * 2、基于LinkedList构建堆栈 push pop和队列 offer poll * <p> * Set HashSet,TreeSet 无序,不可重复 * 1、HashSet比较hashcode(),再比较equals() * 2、TreeSet比较comparable和comparator * <p> * Map * 1、HashMap,2次添加相同key,之前value被覆盖; key为引用类型,则Hash也需实现hashCode和equals方法 * 2、TreeMap key为引用类型,同样是实现 comparable和comparator */ @Data public class CollectionTest { @Test public void testList() { ArrayList<Integer> integers = new ArrayList<Integer>(); integers.add(1); integers.add(2); integers.add(3); /**添加到指定位置*/ integers.add(0, 0); /**修改指定位置值*/ integers.set(0, -1); /**取索引位置值*/ Integer integer = integers.get(0); /**列表索引从0开始*/ int i0 = integers.indexOf(-1); int i3 = integers.indexOf(3); System.out.println("index:0:" + integer); System.out.println("index:-1:index:" + i0); System.out.println("elem:3:index:" + i3); integers.forEach(p -> { System.out.println(p); }); } /** * 对象类型放入列表,当使用indexOf和Contains方法必须实现对应equals方法 */ @Test public void testObjList() { ArrayList<Demo> demos = new ArrayList<>(); demos.add(new Demo(1, "binfire")); demos.add(new Demo(2, "shanshan")); Demo demo = new Demo(2, "yuxuan"); int i = demos.indexOf(demo); boolean contains = demos.contains(demo); System.out.printf("index:%d,exists;%b", i, contains); } /** * %s:字符串 %c 字符 %b 布尔值 %x 16进制 %o 8进制 %d%% 百分笔 %n换行 */ @Test void testPrintf() { System.out.printf("%s;%c;%b;%d;%x;%o;%f;%d%%;%n", "china", 'i', true, 10, 100, 100, 99.9, 85); String a = "191328015"; if (a == "191328015") { System.out.printf("ok"); } else { System.out.printf("error"); } } @Test void testLinkList() { LinkedList<Integer> integers = new LinkedList<>(); integers.add(1); integers.add(2); integers.add(3); integers.addFirst(0); integers.addLast(4); System.out.printf("%d%n", integers.getFirst()); System.out.printf("%d%n", integers.getLast()); System.out.printf("%d%n", integers.get(1)); integers.removeFirst(); integers.removeLast(); System.out.println(integers.toString()); } /** * 模拟堆栈 linkedList.push linkedList.pop */ @Test void testStack() { LinkedList<Integer> integers = new LinkedList<>(); integers.push(1); integers.push(2); integers.push(3); while (integers.size() > 0) { System.out.println(integers.pop()); } } /** * 模拟队列 linkedList.offer linkedList.poll */ @Test void testQueue() { LinkedList<Integer> integers2 = new LinkedList<>(); integers2.offer(1); integers2.offer(2); integers2.offer(3); while (integers2.size() > 0) { System.out.println(integers2.poll()); } } /** * 首先计算HashCode,再计算equals方法 */ @Test void testHashSet() { HashSet<Demo> demos = new HashSet<>(); demos.add(new Demo(1, "binfire")); demos.add(new Demo(2, "yuxuan")); boolean shanshan = demos.add(new Demo(1, "shanshan")); System.out.printf("can add %b%n", shanshan); System.out.println(demos.toString()); HashSet<String> strings = new HashSet<>(); strings.add("binfire"); strings.add("yuxuan"); boolean binfire = strings.add("binfire"); System.out.println("can add :" + binfire); System.out.println(strings.toString()); } /** * 比较实现Comparable<T>接口, 重复则不添加 */ @Test void testTreeSet() { TreeSet<Integer> set = new TreeSet<>(); set.add(1); set.add(9); set.add(8); set.add(7); set.add(6); set.add(5); set.add(1); System.out.println(set.toString()); /**Demo继承Comparator*/ TreeSet<Demo> demos = new TreeSet<>(); demos.add(new Demo(1, "binfire")); demos.add(new Demo(2, "shanshan")); demos.add(new Demo(3, "yuxuan")); demos.add(new Demo(1, "xiaohong")); System.out.println(demos.toString()); /**自定义比较器*/ TreeSet<Demo> demos1 = new TreeSet<>(new Comparator<Demo>() { @Override public int compare(Demo o1, Demo o2) { return o1.id - o2.id; } }); demos1.add(new Demo(1, "binfire")); demos1.add(new Demo(2, "shanshan")); demos1.add(new Demo(3, "yuxuan")); demos1.add(new Demo(1, "xiaohong")); System.out.println(demos1.toString()); } @Test void testHashMap() { Map<Integer, String> integerStringHashMap = new HashMap<Integer, String>(); integerStringHashMap.put(1, "binfire"); integerStringHashMap.put(2, "shanshan"); String yuxuan = integerStringHashMap.put(1, "yuxuan"); /*相同key则覆盖*/ System.out.println(yuxuan); System.out.println(integerStringHashMap.toString()); String binfire = integerStringHashMap.put(3, "binfire"); System.out.println(binfire + "空"); //integerStringHashMap.entrySet().for for (Map.Entry<Integer, String> integerStringEntry : integerStringHashMap.entrySet()) { System.out.println(integerStringEntry.getKey() + ":" + integerStringEntry.getValue()); } HashMap<Demo, String> demoStringHashMap = new HashMap<>(); demoStringHashMap.put(new Demo(1, "binfier001"), "001"); demoStringHashMap.put(new Demo(2, "binfier002"), "002"); demoStringHashMap.put(new Demo(1, "binfier003"), "003"); for (Map.Entry<Demo, String> demoStringEntry : demoStringHashMap.entrySet()) { System.out.println(demoStringEntry.getKey() + ":" + demoStringEntry.getValue()); } } @Test void testTreeMap() { TreeMap<Demo, String> demoStringTreeMap = new TreeMap<>(new Comparator<Demo>() { @Override public int compare(Demo o1, Demo o2) { return o1.id-o2.id; } }); demoStringTreeMap.put(new Demo(1,"binfire001"),"001"); demoStringTreeMap.put(new Demo(2,"binfire002"),"002"); demoStringTreeMap.put(new Demo(1,"binfire001"),"003"); for (Map.Entry<Demo, String> demoStringEntry : demoStringTreeMap.entrySet()) { System.out.println("key="+demoStringEntry.getKey().toString()+";value="+demoStringEntry.getValue()); } } @Data @AllArgsConstructor @NoArgsConstructor @Accessors(chain = true) class Demo implements Comparable<Demo> { private int id; private String name; @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Demo)) return false; Demo demo = (Demo) o; return id == demo.id; } @Override public int hashCode() { return Objects.hash(id); } @Override public int compareTo(Demo o) { return this.id - o.id; } @Override public String toString() { return "Demo{" + "id=" + id + ", name='" + name + '\'' + '}'; } } }