集合泛型 #yyds干货盘点#

Posted 梁云亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合泛型 #yyds干货盘点#相关的知识,希望对你有一定的参考价值。

8.1 Collection List Set

  • ArrayList
package cn.webrx;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;

public class List1 

    public static void main(String[] args) 
        //实例化ArrayList
        List list1 = new ArrayList();
        ArrayList list2 = new ArrayList();
        var list = new ArrayList();
        var list3 = List.of(1,2,3,"hello","php",new Date());

        //array list相互转换
        int[] arr = new int[]1,2,3;
        List lis = new ArrayList(Arrays.asList(arr));
        System.out.println(lis.get(0));
        System.out.println(lis.size());

        //增加元素
        list.add("java");
        list.add(100);
        list.add(new Date());
        list.add(0, "javascript");

        //输出集合容器中的元素个数
        System.out.println(list.size());
        list.remove(2);//删除一个元素
        list.remove(2);//删除一个元素
        list.add(1,new Date());
        System.out.println(String.format("%1$tF %1$tT",list.get(1)));

        //清空集合,删除所有元素  .size() 为0
        //list.clear();
        list.add("python");
        System.out.println(list.indexOf("java"));
        list.set(2, "python");//修改指定索引位置的对象

        System.out.println(list.contains("java"));
        System.out.println("-".repeat(50));
        //list.remove("python");

        //list.removeIf(e->e.toString().contains("py"));
        //list.removeIf(e->true);

        System.out.println(list.size());
        for(Object o : list) 
            System.out.println(o);
        

        Object[] os = list.toArray();
        System.out.println(os.length);

        System.out.println("-".repeat(50));
        list.addAll(2, List.of(100,200,300,400,500));//将另一个list增加进来
        list.forEach(System.out::println);
    

  • ArrayList和Array数组类型转换
package cn.webrx;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class List2 

    public static void main(String[] args) 
        Integer[] nums = new Integer[]  10, 20, 30, 40, 50 ;

        //固定尺寸的List
        List<Integer> list = Arrays.asList(nums);
        List list2 = List.of(1, 2, 3);
        System.out.println(list.size());
        System.out.println(list2.size());
        //list.clear(); 异常
        //list2.clear(); 异常

        //数组 转 List
        List list3 = new ArrayList(list);
        System.out.println(list3.size());
        list3.add(600);
        list3.addAll(List.of(700,800,900));

        System.out.println(list3.size());
        System.out.println(list3);
        System.out.println(Arrays.toString(nums));//数组

        //List 转到 数组
        Object[] ns = list3.toArray();
        System.out.println(ns.length);
        for(Object i : ns) 
            System.out.println(i);
        
    

package cn.webrx;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class List3 

    public static void main(String[] args) 

        List<String> list = new ArrayList<String>();
        list.addAll(List.of("java", "php", "python"));
        list.add(0, "html");
        list.add(2, "javascript");
        list.set(3, "mysql");

        System.out.println(list.size());// 5
        System.out.println(list.get(1));// java
        System.out.println(list.indexOf("mysql"));// 3
        System.out.println(list.contains("python"));// true

        // list.forEach(System.out::println);
        list.stream().filter(e -> e.startsWith("java")).forEach(System.out::println);

        for (String s : list) 
            System.out.println(s);
        

        System.out.println(list);

        Integer[] nn =  10, 20, 30, 40 ;
        System.out.println(nn);
        System.out.println(Arrays.toString(nn));
        System.out.println(List.of(nn));//固定尺寸的List
        System.out.println(new ArrayList<Integer>(List.of(nn)));//List

        var lista = new ArrayList<String>(List.of("a","b","c"));
        var listb = new ArrayList<String>(List.of("aa","bb","cc","dd"));
        lista.addAll(listb);
        lista.addAll(listb);
        lista.addAll(listb);
        System.out.println(lista);

    


  • HashSet
package cn.webrx;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;

import javax.imageio.ImageIO;

public class Set1 

    public static void main(String[] args) throws FileNotFoundException, IOException 
        Set<Integer> sets = new HashSet<>();

        sets.add(10);
        sets.add(10);
        sets.add(10);
        sets.add(10);
        sets.add(10);
        // System.out.println(sets.size());

        // sets.clear();
        // sets.contains(10)
        // sets.remove(10);

        // 编写双色球效果
        Random rand = new Random();
        // 生成蓝色 1 (1-16)
        int blue = rand.nextInt(16) + 1;

        // 生成红色 5 (1-33)
        Set<Integer> reds = new HashSet<>();
        while (reds.size() < 5)
            reds.add(rand.nextInt(33) + 1);
        System.out.println(reds);
        System.out.println(blue);
        List<Integer> list = new ArrayList<Integer>(reds);
        list.sort((a, b) -> a - b);
        list.add(blue);
        System.out.println(list);

        BufferedImage i = new BufferedImage(350, 100, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = i.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);

        g.setFont(new Font("", Font.BOLD, 25));
        g.setStroke(new BasicStroke(3));
        for (int n = 0; n < list.size(); n++) 
            g.setColor(Color.BLUE);
            int x = n * 55 + 12;
            int y = 28;
            String sc = String.format("%02d", list.get(n));
            if (n < 5) 
                g.setColor(Color.RED);
                g.drawOval(x, y, 50, 50);
                g.drawString(sc, x + 12, y + 33);
                continue;
            
            g.drawOval(x, y, 50, 50);
            g.drawString(sc, x + 12, y + 33);

        
        g.dispose();
        ImageIO.write(i, "png", new FileOutputStream("ok.png"));

        //Runtime run = Runtime.getRuntime();
        //run.exec("cmd /k start ok.png");

    


  • LinkedList

1、LinkedList类是List接口的一个具体实现类

2、LinkedList 类用于创建链表数据结构

3、插入或者删除元素时,它提供更好的性能

package cn.webrx;

import java.util.LinkedList;
import java.util.List;

public class LinkedList1 
    public static void main(String[] args) 
        LinkedList<String> list = new LinkedList<>();
        list.add("java");
        list.add("html");
        list.add("mysql");
        //list.clear();
        //list.isEmpty();
        list.remove("java");
        list.remove(0);

        list.addFirst("java");
        list.addLast("python");

        System.out.println(list);
    

package cn.webrx;

import java.util.LinkedList;

public class Stack<E> 
    private E e;
    private LinkedList<E> stack = new LinkedList<>();
    private int i = 0;

    public Stack() 

    

    public int size() 
        return this.i;
    

    public void add(E e) 
        ++i;
        stack.addLast(e);
    

    public E get() 
        --i;
        return stack.removeLast();
    


8.2 Map

  • HashMap
package cn.webrx;

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

public class Map1 

    public static void main(String[] args) 
        // Book b1 = new Book(100,"《java项目实战开发》",18);
        // Book b2 = b1;
        // b2.setPrice(90);
        // System.out.println(b1 == b2);//true false
        // System.out.println(b1.getPrice());

        // keys values 键值对数组
        Map<String, Book> m = new HashMap<>();
        m.put("java1", new Book(100, "《java项目实战开发》", 18));
        m.put("java2", new Book(100, "《java项目实战开发》", 18));
        m.put("java3", new Book(100, "《java项目实战开发》", 18));
        m.put("java3", new Book(100, "《java项目实战开发》", 18));
        m.put("php", new Book(101, "《php入门开发》", 15));

        System.out.println(m.containsKey("php"));//true
        System.out.println(m.containsValue(m.get("php")));//true

        // m.clear();
        // m.size();
        // m.isEmpty()
        // 移除元素
         Book book = m.remove("java3");
        // System.out.println(book);
         System.out.println(m.containsValue(book));//false

        // System.out.println(m.size());

        Set<String> keys = m.keySet();
        for (String k : keys) 
            System.out.printf("%s = %s %n", k, m.get(k));
        

        // 遍历值集合Collection
        Collection<Book> vs = m.values();
        for (Book bk : vs) 
            System.out.println(bk);
        

        m.forEach((k, v) -> 
            System.out.println(k);
            System.out.println(v);
        );

    


8.3 泛型编程

泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现。

泛型机制将类型转换时的类型检查从运行时提前到了编译时,使用泛型编写的代码比杂乱的使用Object并在需要时再强制类型转换的机制具有更好的可读性和安全性。

泛型程序设计意味着程序可以被不同类型的对象重用,类似c++的模版。

泛型对于集合类尤其有用,如ArrayList。这里可能有疑问,既然泛型为了适应不同的对象,ArrayList本来就可以操作不同类型的对象呀?那是因为没有泛型之前采用继承机制实现的,实际上它只维护了一个Object对象的数组。结果就是对List来说它只操作了一类对象Object,而在用户看来却可以保存不同的对象。

泛型提供了更好的解决办法——类型参数,如:

List list = new ArrayList();

这样解决了几个问题:

1 可读性,从字面上就可以判断集合中的内容类型;

2 类型检查,避免插入非法类型。

3 获取数据时不在需要强制类型转换。

以上是关于集合泛型 #yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#JavaScript - 字符串的转义

#yyds干货盘点#JavaScript - 字符串的转义

Java集合框架之 Collection 接口 #yyds干货盘点#

#yyds干货盘点#Go+ 集合 Collection 教程(4.3)

#yyds干货盘点# JVM集合之开篇点题

学习Java必备的基础知识打卡12.7,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#