List的使用

目錄

List的常見方法:

List的實現 

List的使用


由於List(線性表)是一個接口,所以一般用ArrayList(順序表)和LinkedList(鏈表)進行構造。

        //設置初始容量,若不設置,默認初始容量爲10,1.5倍擴容
        List<Integer> list = new ArrayList<>(10); 
        List<Integer> List2 = new LinkedList<>();

List的常見方法:

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1); //尾插
        list.add(1,3); //把3插入index=1的位置
        list.addAll(list);  //傳入的參數必須實現Collection接口
        list.remove(0);  //刪除index位置元素
        int ret = list.get(1);  //獲得index位置的元素
        list.set(0,11); //將0號下標的元素設爲11
        boolean bol = list.contains(11); //判斷11是否在線性表中
        int ret1 = list.indexOf(11); //返回第一個11所在的位置
        int re2 = list.lastIndexOf(11); //返回最後一個11所在的位置
        List l1 = list.subList(0,1); //截取部分list 沒有產生新的對象!
    }

List的實現 

      ArrayList:底層由數組實現,查詢快,增刪慢。線程不安全,效率高。

      Vector:底層由數組實現,查詢快,增刪慢。線程安全,效率底。

      LinkedList:底層由鏈表實現,查詢慢,增刪快。線程不安全,效率高。

List的使用

1.有一個List當中存放的是整形的數據,要求使用Collection.sort對List進行排序。

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(12);
    list.add(4);
    list.add(7);
    list.add(6);
    System.out.println(list);
    Collections.sort(list);
    System.out.println(list);
}

如果是自定義類型:

1)Person實現comparable接口
2)重寫comparaTo()方法

class Person implements Comparable<Person> {
    public String name;
    public int age;

    public Person(String name, int age) {
        this.age = age;
        this.name = name;
    }

    @Override
    public int compareTo(Person o) {
        return this.age - o.age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public static void main1(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(12);
    list.add(4);
    list.add(7);
    list.add(6);
    System.out.println(list);
    Collections.sort(list);
    System.out.println(list);
}

public static void main(String[] args) {
    List<Person> list = new ArrayList<>();
    list.add(new Person("a", 22));
    list.add(new Person("c",10));
    list.add(new Person("b",55));
    System.out.println(list);
    Collections.sort(list);
    System.out.println(list);
}

 

2.刪除第一個字符串當中出現的第二個字符串中的字符。
例如:
 String str1 = "happy new year";
 String str2 = "appy";
 輸出:h new year

思路分析:結果得放到一個List當中,下標i遍歷str1,如果包含str2,i++,不包含,放入List當中。

    public static List<Character> func(String str1,String str2) {
        List<Character> ret = new ArrayList<>();
        for (int i = 0; i < str1.length(); i++) {
            char ch = str1.charAt(i);
            if(!str2.contains(ch+"")){
                ret.add(ch);
            }
        }
        return ret;
    }

3.楊輝三角

 

思路分析:
List裏面放了一個List,相當於一個二維數組。
①進來時放一個1
②中間:3,1 = 2,1+2,0 --》 [i,j] = [i-1,j] + [i-1,j-1]
③出去時放一個1

    //numRows:你的行數
    public static List<List<Integer>> generate(int numRows) {

        List<List<Integer>> triangle = new ArrayList<>();

        if(numRows == 0) {
            return triangle;
        }
        triangle.add(new ArrayList<>());//0
        triangle.get(0).add(1);
        //行數
        for (int i = 1; i < numRows; i++) {
            List<Integer> curRow = new ArrayList<>();
            curRow.add(1);
            //上一行
            List<Integer> prevRow = triangle.get(i-1);
            //第i行的第j列
            for (int j = 1; j < i; j++) {
                int tmp = prevRow.get(j-1)+prevRow.get(j);
                curRow.add(tmp);
            }
            curRow.add(1);
            triangle.add(curRow);
        }
        return triangle;
    }

4.自己練習的小Demo撲克牌哈哈哈

包括買牌、洗牌、發牌等操作。

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

class Card {
    public String suit;
    public int rank;
    public Card(String suit,int rank) {
        this.suit = suit;
        this.rank =  rank;
    }
    @Override
    public String toString() {
        return String.format("[%s %d]", suit, rank);
    }
}

public class CardDemo {
    public static final String[] suits = {"♥","♦", "♣","♠"};

    public List<Card> buyPuke() {
        List<Card> deck = new ArrayList<>();
        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(suit,j);
                deck.add(card);
            }
        }
        return deck;
    }

    private void swap(List<Card> deck,int start,int end) {
        Card tmp = deck.get(start);
        deck.set(start,deck.get(end));
        deck.set(end,tmp);
    }

    //洗牌
    public void shuffle(List<Card> deck) {
        Random random = new Random(20191208);  //僞隨機
        for (int i = deck.size()-1; i > 0 ; i--) {
            int index = random.nextInt(i);//[0,i)
            swap(deck,i,index);
        }
    }

    public static void main(String[] args) {
        CardDemo cardDemo = new CardDemo();
        List<Card> list = cardDemo.buyPuke();
        System.out.println(list);
        cardDemo.shuffle(list);
        //發牌  3個人每個人最多發5張牌
        System.out.println("發牌");
        List<List<Card>> hands = new ArrayList<>();

        List<Card> human1 = new ArrayList<>();
        List<Card> human2 = new ArrayList<>();
        List<Card> human3 = new ArrayList<>();

        hands.add(human1);
        hands.add(human2);
        hands.add(human3);

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                hands.get(i).add(list.remove(0));
            }
        }
        System.out.println("第一個人的牌");
        System.out.println(human1);
    }

}

嘖嘖。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章