ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA之泛型类与List的使用

2019-09-11 19:08:18  阅读:357  来源: 互联网

标签:JAVA deck int List System 泛型 之泛 println out


泛型

  1. 泛型类的诞生:增加编译期间的类型检查,取消类型转换的应用

  2. 泛型类的分类:
    1) 泛型类:尖括号<>是泛型的标志
    2) E是类型变量(Type variable)变量名一般要大写
    3) E在定义时是形参,代表的意思是MyArrayList最终传入的类型,但现在还不知道
    注意:泛型类可以一次有多个类型变量,用逗号分割

  3. 泛型是作用在编译期间的一种机制,即运行期间没有泛型的概念

  4. 泛型类的使用
    //定义了一个元素是Book引用的MyArrayList
    MyArrayList books=new MyArrayList();
    books.add(new Book());
    //会产生编译错误,Person类型无法转换为Book类型
    books.add(new Person());
    //不需要做类型转换
    Book book=book.get(0);
    //会产生编译错误,Book类型无法转换为Person类型
    Person person=book.get(0);
    注意:泛型的使用方式:只需要在所有类型后边跟尖括号,并且尖括号内是真正的类型,即E可以看做最后的类型(Book只能想象成E的类型,但实际上E的类型还是Object

  5. 泛型总结
    1) 泛型是为了解决某些容器,算法等代码的通用性而引入,并且能在编译期间做类型检查
    2) 泛型利用的是Object是所有类的祖先类,并且父类的引用可以指向子类对象的特定而工作
    3) 泛型是一种编译期间的机制,即MyArrayList和MyArrayList在运行期间是一个类型
    4) 泛型是Java中的一种合法语法,标志就是尖括号<>

  6. 自动装箱和自动拆箱是工作在编译期间的一种机制
    List的使用

  7. 常见方法:List(线性表)
    boolean add(E,e):尾插e
    E remove(int index):删除index位置元素
    Void clear(():清空
    Arraylist(顺序表): ArrayLIst() 无参构造
    ArrayList(Collection<? Extends E>c) 利用其他Collection构建ArrayList
    LinkedList(链表):LinkedList() 无参构造
    List的使用:代码练习
    public class Card {
    public int rank; //牌面值
    public String suit; //花色;
    @Override
    public String toString(){
    return String.format("[%s %d]",suit,rank);
    }
    }
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Random;
    public class CardGame {
    public static final String[] SUITS = {“♠”, “♥”, “♣”, “♦”};
    //买一副牌
    private static List buyDeck() {
    List deck = new ArrayList<>(52);
    for (int i = 0; i < 4; i++) {
    for (int j = 1; j <= 13; j++) {
    String suit = SUITS[i];
    int rank = j;
    Card card = new Card();
    card.rank = rank;
    card.suit = suit;
    deck.add(card);
    }
    }
    return deck;
    }
    private static void swap(List deck, int i, int j) {
    Card t = deck.get(i);
    deck.set(i, deck.get(j));
    deck.set(j, t);
    }

    private static void shuffle(List deck) {
    Random random = new Random(20190910);
    for (int i = deck.size() - 1; i > 0; i–) {
    int r = random.nextInt(i);
    swap(deck, i, r);
    }
    }
    public static void main(String[] args) {
    List deck = buyDeck();
    System.out.println(“刚买回来的牌”);
    System.out.println(deck);
    shuffle(deck);
    System.out.println(“洗过的牌”);
    System.out.println(deck);
    List<List> hands = new ArrayList<>();
    hands.add(new ArrayList<>());
    hands.add(new ArrayList<>());
    hands.add(new ArrayList<>());
    for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 3; j++) {
    hands.get(j).add(deck.remove(0));
    }
    }
    for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 3; j++) {
    hands.get(j).add(deck.remove(0));
    }
    }
    System.out.println(“剩余的牌:”);
    System.out.println(deck);
    System.out.println(“A手中的牌:”);
    System.out.println(hands.get(0));
    System.out.println(“B手中的牌:”);
    System.out.println(hands.get(1));
    System.out.println(“C手中的牌:”);
    System.out.println(hands.get(2));
    }
    }
    运行结果:在这里插入图片描述

标签:JAVA,deck,int,List,System,泛型,之泛,println,out
来源: https://blog.csdn.net/qq_44929652/article/details/100744719

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有