• Java高级学习栈(史上最详细的整合)


    目录

    一:集合

    1.什么是集合

    2.List的特点

    3.ArrayList和LinkedList的区别

    4.set的提点

    5.map的特点

    6.ArrayList

    7.泛型

    7.1.不带泛型

    7.2带泛型(公司用)

    8.LinkedList实战

    9.HashMap实战

    9.HashSet实战

    二、  Api

    1.枚举 

    2.包装类

    2.1基本数据类型转换为包装类进行算数运算

    2.2将包装类转化为数据类型

    2.3intValue()

    2.4toString()基本类型转化为字符串类型


    一:集合

    1.什么是集合

    定义:通俗的说,集合就是一个放数据的容器,准确的说是放数据对象引用的容器。

    集合可以分为两大体系,一个是Collection,一个是 MapCoection接口又分别被ListSet继承,List被AbstractList实现,然后分为3个子类,ArrayListLinkListVector。Set被AbstractSet实现,又分为HashSetTreeSet。而Map衍生出的集合分为HashMap,HashTableTreeMap。

    Coection接口:

          1.定义的是所有单列集合中共性的方法。

          2.所有的单列集合都可以使用共性的方法。

          3.没有索引的方法。

    Map接口:

         1.双列数据,保存具有映射关系“key-value对”的集合。

     常用功能:

    java.util.Collection接口

    所有单列结合顶层的接口,里面定义了所有单列集合共性的方法。 任意的单列集合都可以使用Collection接口的方法。

    共性的方法:

    public boolean add(E e);把给定的对象添加到当前集合中

    public void clear();清空集合中的所有元素

    public boolean remove(E e);把给定的对象在当前集合中删除

    public boolean contains(E e);判断当前的集合中是否包含给定的对象

    public boolean isEmpty(E e);判断当前集合是否为空

    public int size();返回元素中集合的个数

    public Object[] toArray();把集合中的当前元素,存储到数组中

    1. package Demo01;
    2. import java.util.ArrayList;
    3. import java.util.Collection;
    4. /*
    5. @Author 代码贩子、 --南京邮电大学
    6. */
    7. /*
    8. java.util.Collection接口
    9. 所有单列结合顶层的接口,里面定义了所有单列集合共性的方法。
    10. 任意的单列集合都可以使用Collection接口的方法。
    11. 共性的方法:
    12. public boolean add(E e);把给定的对象添加到当前集合中
    13. public void clear();清空集合中的所有元素
    14. public boolean remove(E e);把给定的对象在当前集合中删除
    15. public boolean contains(E e);判断当前的集合中是否包含给定的对象
    16. public boolean isEmpty(E e);判断当前集合是否为空
    17. public int size();返回元素中集合的个数
    18. public Object[] toArray();把集合中的当前元素,存储到数组中
    19. */
    20. public class jihe {
    21. public static void main(String[] args) {
    22. //创建集合对象,可以使用多态
    23. Collection<String> collection = new ArrayList<>();
    24. System.out.println(collection);//重写了toString方法,打印的是空字符串
    25. //public boolean add(E e);把给定的对象添加到当前集合中
    26. //返回值是一个布尔值,一般都返回true,所以可以不用接收
    27. boolean b1 = collection.add("张三");
    28. System.out.println(b1);//以后不用接收这个返回值,因为没有意义
    29. collection.add("李四");
    30. collection.add("王五");
    31. System.out.println(collection);
    32. //public boolean remove(E e);把给定的对象在当前集合中删除
    33. //返回值是一个布尔值,集合中存在元素,删除元素,返回true
    34. //集合中不存在元素,删除失败,返回false
    35. boolean b2 = collection.remove("田七");
    36. collection.remove("李四");
    37. System.out.println(b2);
    38. System.out.println(collection);
    39. //public boolean contains(E e);判断当前的集合中是否包含给定的对象
    40. //返回值是一个布尔值,集合中存在元素,包含元素,返回true
    41. //集合中不存在元素,不包含元素,返回false
    42. boolean b3 = collection.contains("田七");
    43. collection.contains("张三");
    44. System.out.println(b3);
    45. System.out.println(collection);
    46. //public boolean isEmpty(E e);判断当前集合是否为空
    47. //返回值是一个布尔值,集合为空,返回true
    48. //集合不为空,返回false
    49. boolean b4 = collection.isEmpty();
    50. System.out.println(b4);
    51. System.out.println(collection);
    52. //public int size();返回元素中集合的个数
    53. int size = collection.size();
    54. System.out.println(size);
    55. //public Object[] toArray();把集合中的当前元素,存储到数组中
    56. Object[] arr = collection.toArray();//Object可以存储任意的元素,可以把集合编程一个数组
    57. for (int i = 0; i <arr.length ; i++) {
    58. System.out.println(arr[i]);
    59. }
    60. //public void clear();清空集合中的所有元素
    61. collection.clear();
    62. System.out.println(collection);
    63. System.out.println(collection.isEmpty());
    64. }
    65. }

    2.List的特点

    1.有序的集合(存储和取出元素的顺序相同)。

    2.允许存储重复的元素。

    3.有索引,可以使用普通的for循环来遍历

    3.ArrayList和LinkedList的区别

    二者都线程不安全。ArrayList实现了基于动态数组的数据结构,LinkList是基于链表的数据结构。对于随机访问的set和get的方法,ArrayList要比LinkList更加优秀,因为LinkedList要移动指针。对于新增和删除操作add(特指插入)和remove,LinkedList比较占优势,因为ArrayList要移动数据。

    4.set的提点

    无序,不重复。

    5.map的特点

    无序、以键值对的形式添加元素,键不能重复,值可以重复。它没有继承Collection接口。

    6.ArrayList

    7.泛型

    泛型是一种未知的数据类型,当我们不知道数据类型是什么的时候,可以使用泛型。

    泛型可以看作是一个变量,用来接收数据类型。

    7.1.不带泛型

    好处:可以存储任何的数据类型。

    坏处:在需要使用存储类型的时候需要向下转型,如果没有instanceof就容易报错ClassCastException。

    7.2带泛型(公司用)

    好处:1.将运行期可能出现的问题提前到编译期,如果ArrayList的泛型是String就只能存储String类型。存储别的类型就会报错。

              2.可以使用泛型中数据特有的方法。

    坏处:只能存储一种数据类型。

    8.LinkedList实战

    1. package Demo02;
    2. public class New {
    3. private Integer id;
    4. private String name;
    5. private String title;
    6. public New() {
    7. }
    8. public New(Integer id, String name, String title) {
    9. this.id = id;
    10. this.name = name;
    11. this.title = title;
    12. }
    13. public Integer getId() {
    14. return id;
    15. }
    16. public void setId(Integer id) {
    17. this.id = id;
    18. }
    19. public String getName() {
    20. return name;
    21. }
    22. public void setName(String name) {
    23. this.name = name;
    24. }
    25. public String getTitle() {
    26. return title;
    27. }
    28. public void setTitle(String title) {
    29. this.title = title;
    30. }
    31. }
    32. package Demo02;
    33. import java.util.LinkedList;
    34. public class psvm {
    35. /*
    36. LinkedList添加数据的方法
    37. */
    38. public static void main(String[] args) {
    39. New New1 = new New(1,"张三","老板");
    40. New New2 = new New(2,"李四","老板");
    41. New New3 = new New(3,"王五","老板");
    42. New New4 = new New(4,"赵六","老板");
    43. New New5 = new New(5,"田七","老板");
    44. LinkedList<New> linkedList = new LinkedList<New>();
    45. linkedList.add(New1);
    46. linkedList.add(New2);
    47. linkedList.add(New3);
    48. linkedList.add(New4);
    49. linkedList.add(New5);
    50. System.out.println(linkedList.size());
    51. /*
    52. LinkedList删除数据的方法
    53. */
    54. //精准定位角标来进行删除
    55. linkedList.remove(2);
    56. //删除第一条数据
    57. linkedList.removeFirst();
    58. //删除最后一条数据
    59. linkedList.removeLast();
    60. System.out.println(linkedList.size());
    61. /*
    62. LinkedList查询数据的方法
    63. */
    64. //查询第一条数据
    65. linkedList.getFirst().getName();
    66. //查询最后一条数据
    67. linkedList.getLast().getName();
    68. //for循环遍历数据
    69. // for (int i = 0; i <linkedList.size() ; i++) {
    70. // System.out.println(linkedList.get(i).getName());
    71. // }
    72. //增强for遍历数据
    73. for (New news: linkedList){
    74. System.out.println("Id"+news.getId()+"name"+news.getName()+"title"+news.getTitle());
    75. }
    76. }
    77. }

    9.HashMap实战

    特点:键值存储。

    1. package Demo02;
    2. import java.util.HashMap;
    3. import java.util.Iterator;
    4. import java.util.Set;
    5. public class psvm {
    6. /*
    7. LinkedList添加数据的方法
    8. */
    9. public static void main(String[] args) {
    10. //1.实例化HashMap容器
    11. HashMap<String,Object> hashMap= new HashMap<String,Object>();
    12. //2.给HashMap容器添加键值对(添加数据)
    13. hashMap.put("a","aaa");
    14. hashMap.put("1","bbb");
    15. hashMap.put("2","ccc");
    16. //3使用增强for来遍历HashMap
    17. //3.1keySet()代表获取HashMap容器中的所有键的集合
    18. Set<String> sets= hashMap.keySet();
    19. System.out.println(sets);
    20. //3.2增强for循环遍历sets集合将键和值循环遍历出来而得到真正的键
    21. /*
    22. 把HashMap键里面的集合全部的提取出来,通过遍历k就可以得到我们对应的值
    23. */
    24. // for (String s:sets){
    25. // System.out.println(s);
    26. // }
    27. //4.使用迭代器循环遍历HashMap获取键和值
    28. //4.1调用sets的iterator()得到Iterator迭代器
    29. Iterator<String> iterator = sets.iterator();
    30. //4.2通过hasNext()循环判断HashMap容器中是否有下一个值
    31. while (iterator.hasNext()){
    32. //4.3如果有则调用迭代器next()获取对应的值,这个值就是key
    33. String key = iterator.next();
    34. //4.4得到键之后,调用HashMap容器的get()方法获取对应的key键的value
    35. System.out.println("key:"+key+";"+"value:"+hashMap.get(key));
    36. }
    37. }
    38. }

    9.HashSet实战

    特点:唯一,无序。

    1. package Demo03;
    2. import java.util.HashSet;
    3. import java.util.Iterator;
    4. public class Demo03 {
    5. public static void main(String[] args) {
    6. //1.实例化HashSet容器
    7. HashSet<String> sets = new HashSet<String>();
    8. //2.给HashSet容器添加键值对(添加数据)
    9. sets.add("aaa");
    10. sets.add("bbb");
    11. sets.add("ccc");
    12. //3.1keySet()代表获取HashSet容器中的所有键的集合
    13. Iterator<String> its = sets.iterator();
    14. //4.使用迭代器循环遍历HashSet获取键
    15. //4.1调用sets的iterator()得到Iterator迭代器
    16. while (its.hasNext()){
    17. //4.2如果有则调用迭代器next()获取对应的值,这个值就是key
    18. String key = its.next();
    19. //4.3得到键之后,调用HashSet容器的get()方法获取对应的key
    20. System.out.println("key"+key);
    21. }
    22. }
    23. }

    小练习1:遍历List>

    1. package Demo04;
    2. import java.util.*;
    3. public class Demo04 {
    4. public static void main(String[] args) {
    5. //1.准备泛型里的数据
    6. HashMap<String,Object> map = new HashMap<String,Object>();
    7. map.put("a","1");
    8. map.put("b","2");
    9. map.put("c","3");
    10. //2.创建容器ArrayList<Map<String,Object>>
    11. ArrayList<Map<String,Object>> list= new ArrayList>();
    12. //3.准备数据塞入容器中
    13. list.add(map);
    14. //4.遍历ArrayList(从外往里遍历)
    15. for (Map<String,Object> mm :list){
    16. //System.out.println(mm);
    17. //5.获取mm的HashMap容器中的键集合
    18. Set<String> sets = mm.keySet();
    19. //6.获取迭代器
    20. Iterator<String> its = sets.iterator();
    21. //7.循环遍历输出
    22. while (its.hasNext()){
    23. String key = its.next();
    24. System.out.println("key:"+key+";"+"value:"+mm.get(key));
    25. }
    26. }
    27. }
    28. }

    小练习2:遍历Map>

    1. package Demo05;
    2. import java.util.HashMap;
    3. import java.util.Iterator;
    4. import java.util.Map;
    5. import java.util.Set;
    6. public class Demo05 {
    7. public static void main(String[] args) {
    8. /*
    9. new后面的Map<String,Object>是一个类型
    10. 放在外面一定是实现类
    11. 数据应该是Map<String,Object>
    12. */
    13. //1.准备数据
    14. Map<String,Object> m1 = new HashMap<String,Object>();
    15. m1.put("a","1");
    16. m1.put("b","2");
    17. m1.put("c","3");
    18. Map<String,Object> m2 = new HashMap<String,Object>();
    19. m2.put("aa","11");
    20. m2.put("bb","22");
    21. m2.put("cc","33");
    22. Map<String,Object> m3 = new HashMap<String,Object>();
    23. m3.put("aaa","111");
    24. m3.put("bbb","222");
    25. m3.put("ccc","333");
    26. //2.实例化Map<String, Map<String, Object>>()容器
    27. Map<String, Map<String, Object>> map = new HashMap>();
    28. //3.给容器塞值
    29. map.put("aaaa",m1);
    30. map.put("bbbb",m2);
    31. map.put("cccc",m2);
    32. //4.获取外层的Map容器
    33. //4.1获取外层Map容器的key键集合
    34. Set<String> sets = map.keySet();
    35. //4.2获取外层Map容器的游标卡尺
    36. Iterator<String> its = sets.iterator();
    37. //4.3通过游标卡尺循环遍历外层Map
    38. while (its.hasNext()){
    39. //4.4通过游标卡尺获取外层Map的key键集合
    40. String key = its.next();
    41. //4.5 打印输出外层Map的key键集合以及value
    42. System.out.println("外层key:"+key);
    43. //5.遍历内层的Map容器
    44. Map<String, Object> map1= map.get(key);
    45. //5.1获取内层Map容器的key键集合
    46. Set<String> setss = map1.keySet();
    47. //5.2获取内层Map容器的游标卡尺
    48. Iterator<String> itss = setss.iterator();
    49. //5.3通过游标卡尺循环遍历内层Map
    50. while (itss.hasNext()){
    51. //5.4通过游标卡尺获取内层Map的key键集合
    52. String key1 = itss.next();
    53. //5.5打印输出内层Map的key键集合以及value
    54. System.out.println("内层key:"+key1+"内层value:"+map1.get(key1));
    55. }
    56. }
    57. }
    58. }

    二、  Api

    老外写的一些类,类中有许多的方法。

    1.枚举 

    关键字:enum

    使用非枚举方式实现对Student类中的SEX属性赋值

    1. package Demo06;
    2. public class Text {
    3. public static void main(String[] args) {
    4. Student student = new Student();
    5. student.setSex("女");
    6. System.out.println(student.getSex());
    7. student.setSex("男女");//这里及有问题了 也不是人妖
    8. /*
    9. 想要解决这个问题我们可以将他作为一个常量来进行定义、
    10. 但是这样做就不能进行多次赋值
    11. private static final String SEX="男";
    12. */
    13. System.out.println(student.getSex());
    14. }
    15. }
    16. package Demo06;
    17. public class Student {
    18. private String Sex;
    19. public String getSex(){
    20. return Sex;
    21. }
    22. public void setSex(String sex){
    23. this.Sex = sex;
    24. }
    25. }

    采用枚举的方式进行解决

    1. package Demo06;
    2. public enum Gender {
    3. 男,女
    4. }
    5. package Demo06;
    6. public class Student {
    7. private Gender Sex;
    8. public Gender getSex() {
    9. return Sex;
    10. }
    11. public void setSex(Gender sex) {
    12. Sex = sex;
    13. }
    14. }
    15. package Demo06;
    16. public class Text {
    17. public static void main(String[] args) {
    18. Student student = new Student();
    19. student.setSex(Gender.女);
    20. System.out.println(student.getSex());
    21. student.setSex(Gender.男);
    22. System.out.println(student.getSex());
    23. student.setSex("FALSE");//这里就报错了
    24. }
    25. }

    2.包装类

    定义:所有的包装类在java.lang包中都有一个相应的包装类。

    作用:包装类提供一系列的实用方法,集合不允许存放基本的数据类型,要进行数字的存放时,要使用包装类型。(比如 ArrayList<> arrayList= new ArryList<>;<>l里面要么放Steing类型,要么放包装类型,想要放基本类型就要继续宁包装).

    2.1基本数据类型转换为包装类进行算数运算

    1. package Demo07;
    2. public class demo07 {
    3. public static void main(String[] args) {
    4. int a = 1;
    5. Integer a_new = new Integer(a);
    6. System.out.println(a_new);
    7. byte b = 2;
    8. Byte b_new = new Byte(b);
    9. System.out.println(b_new);
    10. short c = 3;
    11. short c_new = c;
    12. System.out.println(c_new);
    13. }
    14. }
    1. package Demo07;
    2. public class demo07 {
    3. /*
    4. Author:代码贩子、 南京邮电大学
    5. */
    6. /*
    7. 除了Character以外,其余的包装类可将一个字符串作为参数构造的实例
    8. Au
    9. */
    10. /*
    11. Bollean中除了“ture”(不区分大小写)之外的其它字符串,结果都是False
    12. */
    13. public static void main(String[] args) {
    14. //场景一:两个字符串进行“+”操作
    15. String a = "123";
    16. System.out.println(a+"1");
    17. //场景二:一个字符串和一个基本数据类型进行“+”操作
    18. String b = "2";
    19. System.out.println(a+1);
    20. //场景三:将基本数据类型转化为字符串
    21. int c = 123;
    22. String d = a+"1";
    23. //场景四:两个数值类型进行“+”操作就会变成岁数操作
    24. System.out.println(123+1);
    25. //场景五:将字符串进行算数操作 需要使用包装类
    26. String f = "123";
    27. Integer f_new = new Integer(f);
    28. System.out.println(f_new+123);
    29. //场景六:字符与基本数据类型进行“+”操作
    30. //Character e = new Character("男");
    31. Boolean g = new Boolean("dasdasd");
    32. System.out.println(g);
    33. }
    34. }

    2.2将包装类转化为数据类型

    intValue()

    1. package Demo07;
    2. public class demo07 {
    3. /*
    4. Author:代码贩子、 南京邮电大学
    5. */
    6. public static void main(String[] args) {
    7. Integer a = new Integer(123);
    8. int a_new = a.intValue();
    9. Double b = new Double(3.1415926);
    10. b.doubleValue();
    11. Boolean c = new Boolean(true);
    12. c.booleanValue();
    13. }
    14. }

    toString()基本类型转化为字符串类型

    1. package Demo07;
    2. public class demo07 {
    3. /*
    4. Author:代码贩子、 南京邮电大学
    5. */
    6. public static void main(String[] args) {
    7. //第一种写法
    8. int a = 123;
    9. String b = Integer.toString(a);
    10. double c = 30.0;
    11. String d = Double.toString(c);
    12. //第二种写法(企业常用)
    13. int e = 123;
    14. String f = e+"";
    15. }
    16. }

    parseXXX()字符串类型转换为基本数据类型(Character类型除外)

    1. package Demo07;
    2. public class demo07 {
    3. /*
    4. Author:代码贩子、 南京邮电大学
    5. */
    6. public static void main(String[] args) {
    7. int rum = Integer.parseInt("36");
    8. System.out.println(rum);
    9. boolean bool1 = Boolean.parseBoolean("false");
    10. System.out.println(bool1);
    11. }
    12. }

    valueOf()

    1. package Demo07;
    2. public class demo07 {
    3. /*
    4. Author:代码贩子、 南京邮电大学
    5. */
    6. public static void main(String[] args) {
    7. //场景一:基本类型转化为包装类
    8. Integer intvalue= Integer.valueOf(21);
    9. System.out.println(intvalue);
    10. //场景二:字符串类型转化为包装类(Character除外)
    11. Integer inteValue = Integer.valueOf("21");
    12. double doublecalue= Double.valueOf("32");
    13. System.out.println(doublecalue);
    14. //报错场景
    15. String gender = '男';
    16. //编译报错
    17. Character gg = Character.valueOf(gender);
    18. }
    19. }

    2.3 装箱和拆箱

    定义:(装箱)基本类型转换为包装类型(自动转换!)

               (拆箱)包装类对象转换为基本类型的值(自动转换!)

    附注:包装类不可以取代基本数据,只有在基本数据类型需要用对象表示的时候使用。

    1. package Demo07;
    2. public class demo07 {
    3. /*
    4. Author:代码贩子、 南京邮电大学
    5. */
    6. public static void main(String[] args) {
    7. //基本数据类型可以转换为包装类型(装箱) JDK1.5之后自动转化
    8. Integer a = 5;
    9. //包装类型也可以转换为基本数据类型(拆箱)
    10. int b = a;
    11. }
    12. }

    2.4 String

    package Demo07;
    
    public class demo07 {
        /*
        Author:代码贩子、  南京邮电大学
         */
        public static void main(String[] args) {
            //存在在常量池中
            String a = "写代码";
            //存放在堆中,由变量指向堆中的代码
            String string = new String("写代码");
        }
    }
    
  • 相关阅读:
    代码随想录day动态规划回文子串
    马尔科夫链、PCV及贝叶斯动图详解
    Java基础——了解进制和位运算
    Prometheus监控的搭建(ansible安装——超详细)
    centos7安装gitbook
    香港玉湖集团亮相进博会——展现实力风采,建立共赢平台
    科研热点|官宣!2022年JCR分区和影响因子发布时间确定!
    SPI接口原理与配置
    TikTok整合谷歌搜索功能,探索新的流量入口
    java计算机毕业设计客服管理系统源码+mysql数据库+系统+lw文档+部署
  • 原文地址:https://blog.csdn.net/weixin_45650003/article/details/126416822