4.安卓逆向-常用数据结构java语言中的集合

发布于:2024-09-18 ⋅ 阅读:(136) ⋅ 点赞:(0)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵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());
            }
        }
    }
}


img