欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 4.安卓逆向-常用数据结构java语言中的集合

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

2024/10/24 23:19:45 来源:https://blog.csdn.net/qq_36301061/article/details/142185266  浏览:    关键词:4.安卓逆向-常用数据结构java语言中的集合

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

内容参考于:图灵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是vh1.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(); // 改为了TreeMaph1.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(); // 改为了TreeMaph1.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"); // 不存在,返回nullSystem.out.println(value);boolean existsKey = h1.containsKey("age");// 是否存在age这个kboolean 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();}// 循环: 示例2Set 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();}// 循环: 示例3TreeMap<String, String> h2 = new TreeMap<String, String>(); // 改为了TreeMaph2.put("name", "xialuo");h2.put("age", "18");for (Map.Entry<String, String> entry : h2.entrySet()) {String k = entry.getKey();String v = entry.getValue();}// 循环: 示例4TreeMap h3 = new TreeMap(); // 改为了TreeMaph3.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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com