免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:图灵Python学院
上一个内容:3.安卓逆向-java语言控制流和数据类型
混个眼熟就行不需要掌握,后面逆向多了看多了自然而然的就能掌握了(包掌握的)
上一个内容里写了一些java语言里基本数据类型(字符串、数字、数组)的用法,最终是给控制流(if else while for)做铺垫,然后数据结构指的是数据类型只是叫法不一样,前面的内容里只写了java语言里基本数据类型和一个字符串类型还有一个list类型,本次接着往下写
list类型:
list类型数据的样子
![]()
然后上一个内容里写了两种List一种是ArrayList一种是LinkedList
它俩的区别 ArrayList查询快添加大量数据很慢,LinkedList查询慢添加大量数据很快
ArrayList常用玩法实例:
import java.util.ArrayList; import java.util.Arrays; public class Hello { public static void main(String[] args) { // ArrayList,默认内部存放的是混合数据类型。 // ArrayList<String> data = new ArrayList<String>(); // ArrayList<Object> data = new ArrayList<Object>(); ArrayList data = new ArrayList(); data.add("夏洛"); data.add("aa"); data.add(666); data.add("貂蝉"); String value = data.get(1); value.length // String value = (String) data.get(1); Object temp = data.get(1); String value = (String) temp; // 转化可转换的数据 System.out.println(value); int xo = (int) data.get(2);// get(2)说明获取第三个数据 System.out.println(xo); data.set(0, "哈哈哈哈");// 修改数据 System.out.println(data); data.remove("菲菲");// 删除菲菲这个数据 data.remove(0);// 删除第一个数据 System.out.println(data); int size = data.size(); System.out.println(size); boolean exists = data.contains("莹莹"); System.out.println(exists); for (Object item : data) { System.out.println(item); } for (int i = 0; i < data.size(); i++) { Object item = data.get(i); System.out.println(item); } } }
LinkedList常用玩法实例:
import java.util.LinkedList; public class Hello { public static void main(String[] args) { LinkedList<Integer> v1 = new LinkedList<Integer>(); v1.add(11); v1.add(22); LinkedList<Object> v2 = new LinkedList<Object>(); v2.add("莉莉");// add是把数据放到最后 v2.add("琴琴"); v2.add(666); v2.add(123); //v2.remove(1); //v2.remove("哈哈"); v2.set(2, "菲菲"); v2.push("哈哈哈");// 把哈哈哈添加到开头 // v2.addFirst(11); for (int i = 0; i < v2.size(); i++) { Object item = v2.get(i); System.out.println(item); } for (Object item : v2) { System.out.println(item); } } }
实际逆向时遇到的玩法:
![]()
Set类型
Set存放数据的样子与List一样,Set和List的区别就是Set可以去重排序List不会去重排序
Set只是个规范(这个规范在java中称为接口),实现规范的常用的有两个HashSet和TreeSet
HashSet和TreeSet的区别
HashSet去重无序
TreeSet去重默认排序
HashSet实例:
import java.util.*; public class Hello { public static void main(String[] args) { HashSet s1 = new HashSet(); s1.add("P站"); s1.add("B站"); s1.add("A站"); s1.add("P站"); s1.add(666); System.out.println(s1); // [B站, A站, P站,666] // 创建了一个匿名子类的 HashSet 对象 s2。 // s2 = {"东京热","东北热","南京热"} HashSet s2 = new HashSet(){ { add("东京热"); add("东北热"); add("南京热"); } }; System.out.println(s2); // [东京热, 南京热, 东北热] // Set s2 = new TreeSet(); // TreeSet<String> s2 = new TreeSet<String>(); TreeSet s3 = new TreeSet(); s3.add("P站"); s3.add("B站"); s3.add("A站"); s3.add("P站"); s3.add(666); System.out.println(s3); // [B站, A站, P站] TreeSet s4 = new TreeSet(){ { add("P站"); add("B站"); add("A站"); add("P站"); } }; System.out.println(s4); //[A站, B站, P站] } }
Map类型
Map类型的样子,需要通过K来得到右边的数据,右边的数据称为value简称v,左边的数据称为key简称k
![]()
Map也还是一个规范(接口)实现这个规范的常用的也是两个一个是HashMap和TreeMap
HashMap可以快速插入、查找和删除无顺序
TreeMap默认根据k排序
HashMap实例:
import java.util.*; public class Hello { public static void main(String[] args) { HashMap h1 = new HashMap(); h1.put("name","xialuo"); // put添加数据,name是k,xialuo是v h1.put("age",18); h1.put("hobby","男"); System.out.println(h1); // 特定数据类型 字符串 HashMap<String,String> h2 = new HashMap<String,String>(); h2.put("name","xialuo"); h2.put("age","18"); h2.put("hobby","男"); System.out.println(h2); // 声明 初始化值 HashMap<String,String> h3 = new HashMap<String,String>(){ { put("name","xialuo"); put("age","18"); put("hobby","男"); } }; System.out.println(h3); } }
TreeMap实例:
import java.util.*; public class Hello { public static void main(String[] args) { TreeMap h1 = new TreeMap(); // 改为了TreeMap h1.put("name","xialuo"); h1.put("age",18); h1.put("hobby","男"); System.out.println(h1); // {age=18, hobby=男, name=xialuo} // 固定类型 TreeMap<String,String> h2 = new TreeMap<String,String>(); h2.put("name","xialuo"); h2.put("age","18"); h2.put("hobby","男"); System.out.println(h2); // 声明 初始化值 TreeMap<String,String> h3 = new TreeMap<String,String>(){ { put("name","xialuo"); put("age","18"); put("hobby","男"); } }; System.out.println(h3); // 只能调用 Map 接口中定义的方法,不能直接调用 TreeMap 特有的方法 Map h4 = new TreeMap(); h4.put("name","xialuo"); h4.put("age",18); h4.put("hobby","男"); System.out.println(h4); // h4.firstKey(); } }
TreeMap常见操作
import java.util.*; public class Hello { public static void main(String[] args) { TreeMap h1 = new TreeMap(); // 改为了TreeMap h1.put("name", "xialuo"); h1.put("age", "18"); h1.put("hobby", "男"); h1.put("hobby", "女人"); h1.remove("age"); int size = h1.size(); Object value = h1.get("name"); // 不存在,返回null System.out.println(value); boolean existsKey = h1.containsKey("age");// 是否存在age这个k boolean existsValue = h1.containsValue("xialuo");// 是否存在xialuo这个value // 替换 h1.replace("name", "李杰"); System.out.println(h1); // 循环: 示例1 // { ("name", "xialuo"),("age", "18"), } // entrySet()方法返回一个包含"h1"中所有键值对的Set集合。 Set<Map.Entry<String, String>> s1 = h1.entrySet(); Iterator it1 = s1.iterator(); while (it1.hasNext()) { // ("name", "xialuo") Map.Entry<String, String> entry = (Map.Entry<String, String>) it1.next(); String k = (String) entry.getKey(); String v = (String) entry.getValue(); } // 循环: 示例2 Set s2 = h1.entrySet(); Iterator it2 = s2.iterator(); while (it2.hasNext()) { Map.Entry entry = (Map.Entry) it2.next(); String k = (String) entry.getKey(); String v = (String) entry.getValue(); } // 循环: 示例3 TreeMap<String, String> h2 = new TreeMap<String, String>(); // 改为了TreeMap h2.put("name", "xialuo"); h2.put("age", "18"); for (Map.Entry<String, String> entry : h2.entrySet()) { String k = entry.getKey(); String v = entry.getValue(); } // 循环: 示例4 TreeMap h3 = new TreeMap(); // 改为了TreeMap h3.put("name", "xialuo"); h3.put("age", 18); for (Object entry : h3.entrySet()) { Map.Entry<String, Object> entryMap = (Map.Entry<String, Object>) entry; String k = entryMap.getKey(); Object v = entryMap.getValue(); // 18 "xialuo" if (v instanceof Integer) { System.out.println("数字:" + Integer.toString((Integer) v)); } else if (v instanceof String) { System.out.println("字符串:" + (String) v); } else { System.out.println("未知类型:" + v.toString()); } } } }