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();把集合中的当前元素,存储到数组中

package Demo01;

import java.util.ArrayList;
import java.util.Collection;

/*
@Author 代码贩子、  --南京邮电大学
 */
/*
    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();把集合中的当前元素,存储到数组中
 */
public class jihe {
    public static void main(String[] args) {
        //创建集合对象,可以使用多态
        Collection<String> collection = new ArrayList<>();
        System.out.println(collection);//重写了toString方法,打印的是空字符串
        //public boolean add(E e);把给定的对象添加到当前集合中
        //返回值是一个布尔值,一般都返回true,所以可以不用接收
        boolean b1 = collection.add("张三");
        System.out.println(b1);//以后不用接收这个返回值,因为没有意义
        collection.add("李四");
        collection.add("王五");
        System.out.println(collection);
        //public boolean remove(E e);把给定的对象在当前集合中删除
        //返回值是一个布尔值,集合中存在元素,删除元素,返回true
        //集合中不存在元素,删除失败,返回false
        boolean b2 = collection.remove("田七");
        collection.remove("李四");
        System.out.println(b2);
        System.out.println(collection);
        //public boolean contains(E e);判断当前的集合中是否包含给定的对象
        //返回值是一个布尔值,集合中存在元素,包含元素,返回true
        //集合中不存在元素,不包含元素,返回false
        boolean b3 = collection.contains("田七");
        collection.contains("张三");
        System.out.println(b3);
        System.out.println(collection);
        //public boolean isEmpty(E e);判断当前集合是否为空
        //返回值是一个布尔值,集合为空,返回true
        //集合不为空,返回false
        boolean b4 = collection.isEmpty();
        System.out.println(b4);
        System.out.println(collection);
        //public int size();返回元素中集合的个数
        int size = collection.size();
        System.out.println(size);
        //public Object[] toArray();把集合中的当前元素,存储到数组中
        Object[] arr = collection.toArray();//Object可以存储任意的元素,可以把集合编程一个数组
        for (int i = 0; i <arr.length ; i++) {
            System.out.println(arr[i]);
        }
        //public void clear();清空集合中的所有元素
        collection.clear();
        System.out.println(collection);
        System.out.println(collection.isEmpty());
    }
}

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实战

package Demo02;

public class New {
    private Integer id;
    private String name;
    private String title;

    public New() {
    }
    public New(Integer id, String name, String title) {
        this.id = id;
        this.name = name;
        this.title = title;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
package Demo02;

import java.util.LinkedList;

public class psvm {
    /*
    LinkedList添加数据的方法
     */
    public static void main(String[] args) {
        New New1  = new New(1,"张三","老板");
        New New2  = new New(2,"李四","老板");
        New New3  = new New(3,"王五","老板");
        New New4  = new New(4,"赵六","老板");
        New New5  = new New(5,"田七","老板");
        LinkedList<New> linkedList = new LinkedList<New>();
        linkedList.add(New1);
        linkedList.add(New2);
        linkedList.add(New3);
        linkedList.add(New4);
        linkedList.add(New5);
        System.out.println(linkedList.size());
        /*
        LinkedList删除数据的方法
         */
        //精准定位角标来进行删除
        linkedList.remove(2);
        //删除第一条数据
        linkedList.removeFirst();
        //删除最后一条数据
        linkedList.removeLast();
        System.out.println(linkedList.size());
        /*
         LinkedList查询数据的方法
         */
        //查询第一条数据
        linkedList.getFirst().getName();
        //查询最后一条数据
        linkedList.getLast().getName();
        //for循环遍历数据
//        for (int i = 0; i <linkedList.size() ; i++) {
//            System.out.println(linkedList.get(i).getName());
//        }
        //增强for遍历数据
        for (New news: linkedList){
            System.out.println("Id"+news.getId()+"name"+news.getName()+"title"+news.getTitle());
        }
    }
}

9.HashMap实战

特点:键值存储。

package Demo02;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class psvm {
    /*
    LinkedList添加数据的方法
     */
    public static void main(String[] args) {
        //1.实例化HashMap容器
        HashMap<String,Object> hashMap= new HashMap<String,Object>();
        //2.给HashMap容器添加键值对(添加数据)
        hashMap.put("a","aaa");
        hashMap.put("1","bbb");
        hashMap.put("2","ccc");
        //3使用增强for来遍历HashMap
        //3.1keySet()代表获取HashMap容器中的所有键的集合
        Set<String> sets= hashMap.keySet();
        System.out.println(sets);
        //3.2增强for循环遍历sets集合将键和值循环遍历出来而得到真正的键
        /*
        把HashMap键里面的集合全部的提取出来,通过遍历k就可以得到我们对应的值
         */
//        for (String s:sets){
//            System.out.println(s);
//        }
        //4.使用迭代器循环遍历HashMap获取键和值
        //4.1调用sets的iterator()得到Iterator迭代器
        Iterator<String> iterator = sets.iterator();
        //4.2通过hasNext()循环判断HashMap容器中是否有下一个值
        while (iterator.hasNext()){
            //4.3如果有则调用迭代器next()获取对应的值,这个值就是key键
            String key = iterator.next();
            //4.4得到键之后,调用HashMap容器的get()方法获取对应的key键的value值
            System.out.println("key:"+key+";"+"value:"+hashMap.get(key));
        }
    }
}

9.HashSet实战

特点:唯一,无序。

package Demo03;
import java.util.HashSet;
import java.util.Iterator;

public class Demo03 {
    public static void main(String[] args) {
        //1.实例化HashSet容器
       HashSet<String> sets = new HashSet<String>();
        //2.给HashSet容器添加键值对(添加数据)
       sets.add("aaa");
       sets.add("bbb");
       sets.add("ccc");
        //3.1keySet()代表获取HashSet容器中的所有键的集合
       Iterator<String> its = sets.iterator();
        //4.使用迭代器循环遍历HashSet获取键
        //4.1调用sets的iterator()得到Iterator迭代器
       while (its.hasNext()){
           //4.2如果有则调用迭代器next()获取对应的值,这个值就是key键
           String key = its.next();
           //4.3得到键之后,调用HashSet容器的get()方法获取对应的key键
           System.out.println("key"+key);
       }
    }
}

小练习1:遍历List<Map<String,Object>>

package Demo04;

import java.util.*;

public class Demo04 {
    public static void main(String[] args) {
        //1.准备泛型里的数据
        HashMap<String,Object> map = new HashMap<String,Object>();
        map.put("a","1");
        map.put("b","2");
        map.put("c","3");
        //2.创建容器ArrayList<Map<String,Object>>
        ArrayList<Map<String,Object>> list= new ArrayList<Map<String,Object>>();
        //3.准备数据塞入容器中
        list.add(map);
        //4.遍历ArrayList(从外往里遍历)
        for (Map<String,Object> mm :list){
            //System.out.println(mm);
            //5.获取mm的HashMap容器中的键集合
            Set<String> sets = mm.keySet();
            //6.获取迭代器
            Iterator<String> its = sets.iterator();
            //7.循环遍历输出
            while (its.hasNext()){
                String key =  its.next();
                System.out.println("key:"+key+";"+"value:"+mm.get(key));
            }
        }
    }
}

小练习2:遍历Map<String, Map<String, Object>>

package Demo05;


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Demo05 {
    public static void main(String[] args) {
    /*
    new后面的Map<String,Object>是一个类型
    放在外面一定是实现类
    数据应该是Map<String,Object>
     */
        //1.准备数据
        Map<String,Object> m1 = new HashMap<String,Object>();
        m1.put("a","1");
        m1.put("b","2");
        m1.put("c","3");
        Map<String,Object> m2 = new HashMap<String,Object>();
        m2.put("aa","11");
        m2.put("bb","22");
        m2.put("cc","33");
        Map<String,Object> m3 = new HashMap<String,Object>();
        m3.put("aaa","111");
        m3.put("bbb","222");
        m3.put("ccc","333");
        //2.实例化Map<String, Map<String, Object>>()容器
        Map<String, Map<String, Object>> map = new HashMap<String, Map<String, Object>>();
        //3.给容器塞值
        map.put("aaaa",m1);
        map.put("bbbb",m2);
        map.put("cccc",m2);
        //4.获取外层的Map容器
        //4.1获取外层Map容器的key键集合
        Set<String> sets = map.keySet();
        //4.2获取外层Map容器的游标卡尺
        Iterator<String> its = sets.iterator();
        //4.3通过游标卡尺循环遍历外层Map
        while (its.hasNext()){
            //4.4通过游标卡尺获取外层Map的key键集合
            String key = its.next();
            //4.5 打印输出外层Map的key键集合以及value值
            System.out.println("外层key:"+key);
            //5.遍历内层的Map容器
            Map<String, Object> map1= map.get(key);
            //5.1获取内层Map容器的key键集合
            Set<String> setss = map1.keySet();
            //5.2获取内层Map容器的游标卡尺
            Iterator<String> itss = setss.iterator();
            //5.3通过游标卡尺循环遍历内层Map
            while (itss.hasNext()){
                //5.4通过游标卡尺获取内层Map的key键集合
               String key1 = itss.next();
               //5.5打印输出内层Map的key键集合以及value值
                System.out.println("内层key:"+key1+"内层value:"+map1.get(key1));
            }
        }
    }
}

二、  Api

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

1.枚举 

关键字:enum

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

package Demo06;

public class Text {
    public static void main(String[] args) {
        Student student = new Student();
        student.setSex("女");
        System.out.println(student.getSex());
        student.setSex("男女");//这里及有问题了 也不是人妖
        /*
        想要解决这个问题我们可以将他作为一个常量来进行定义、
        但是这样做就不能进行多次赋值
        private static final String SEX="男";
         */
        System.out.println(student.getSex());
    }
}
package Demo06;

public class Student {
    private String Sex;
    public String getSex(){
        return Sex;
    }
    public void setSex(String sex){
        this.Sex = sex;
    }
}

采用枚举的方式进行解决

package Demo06;

public enum  Gender {
    男,女
}
package Demo06;

public class Student {
    private Gender Sex;

    public Gender getSex() {
        return Sex;
    }

    public void setSex(Gender sex) {
        Sex = sex;
    }
}
package Demo06;

public class Text {
    public static void main(String[] args) {
        Student student = new Student();
        student.setSex(Gender.女);
        System.out.println(student.getSex());
        student.setSex(Gender.男);
        System.out.println(student.getSex());
        student.setSex("FALSE");//这里就报错了
    }
}

2.包装类

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

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

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

package Demo07;

public class demo07 {
    public static void main(String[] args) {
        int a = 1;
        Integer a_new = new Integer(a);
        System.out.println(a_new);
        byte b = 2;
        Byte b_new = new Byte(b);
        System.out.println(b_new);
        short c = 3;
        short c_new = c;
        System.out.println(c_new);
    }
}
package Demo07;

public class demo07 {
    /*
    Author:代码贩子、  南京邮电大学
     */
    /*
    除了Character以外,其余的包装类可将一个字符串作为参数构造的实例
    Au
     */
    /*
    Bollean中除了“ture”(不区分大小写)之外的其它字符串,结果都是False
     */
    public static void main(String[] args) {
        //场景一:两个字符串进行“+”操作
        String a = "123";
        System.out.println(a+"1");
        //场景二:一个字符串和一个基本数据类型进行“+”操作
        String b = "2";
        System.out.println(a+1);
        //场景三:将基本数据类型转化为字符串
        int c = 123;
        String d = a+"1";
        //场景四:两个数值类型进行“+”操作就会变成岁数操作
        System.out.println(123+1);
        //场景五:将字符串进行算数操作  需要使用包装类
        String f = "123";
        Integer f_new = new Integer(f);
        System.out.println(f_new+123);
        //场景六:字符与基本数据类型进行“+”操作
        //Character e = new Character("男");
        Boolean g = new Boolean("dasdasd");
        System.out.println(g);
    }
}

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

intValue()

package Demo07;

public class demo07 {
    /*
    Author:代码贩子、  南京邮电大学
     */
    public static void main(String[] args) {
        Integer a = new Integer(123);
        int a_new = a.intValue();
        Double b = new Double(3.1415926);
        b.doubleValue();
        Boolean c = new Boolean(true);
        c.booleanValue();
    }
}

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

package Demo07;

public class demo07 {
    /*
    Author:代码贩子、  南京邮电大学
     */
    public static void main(String[] args) {
        //第一种写法
        int a = 123;
        String b = Integer.toString(a);
        double c = 30.0;
       String d = Double.toString(c);
       //第二种写法(企业常用)
        int e = 123;
        String f = e+"";
    }
}

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

package Demo07;

public class demo07 {
    /*
    Author:代码贩子、  南京邮电大学
     */
    public static void main(String[] args) {
        int rum = Integer.parseInt("36");
        System.out.println(rum);
        boolean bool1 = Boolean.parseBoolean("false");
        System.out.println(bool1);
    }
}

valueOf()

package Demo07;

public class demo07 {
    /*
    Author:代码贩子、  南京邮电大学
     */
    public static void main(String[] args) {
        //场景一:基本类型转化为包装类
        Integer intvalue= Integer.valueOf(21);
        System.out.println(intvalue);
        //场景二:字符串类型转化为包装类(Character除外)
        Integer inteValue = Integer.valueOf("21");
        double doublecalue= Double.valueOf("32");
        System.out.println(doublecalue);
        //报错场景
        String gender = '男';
        //编译报错
        Character gg = Character.valueOf(gender);
    }
}

2.3 装箱和拆箱

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

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

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

package Demo07;

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

2.4 String

package Demo07;

public class demo07 {
    /*
    Author:代码贩子、  南京邮电大学
     */
    public static void main(String[] args) {
        //存在在常量池中
        String a = "写代码";
        //存放在堆中,由变量指向堆中的代码
        String string = new String("写代码");
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45650003/article/details/126416822
今日推荐