兰州网站建设,信誉好的苏州网站建设,苏州seo关键词优化推广,网站根目录什么是List List是一个接口#xff0c;继承自Collection。 List的使用 List是个接口#xff0c;并不能直接用来实例化。 如果要使用#xff0c;必须去实例化List的实现类。在集合框架中#xff0c;ArrayList和LinkedList都实现了List接口。 线性表 线性表#xff08;lin…
什么是List List是一个接口继承自Collection。 List的使用 List是个接口并不能直接用来实例化。 如果要使用必须去实例化List的实现类。在集合框架中ArrayList和LinkedList都实现了List接口。 线性表 线性表linear list是n个具有相同特性的数据元素的有限序列。 常见的线性表顺序表、链表、栈、队列… 线性表在逻辑上是线性结构也就说是连续的一条直线 顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构一般情况下采用数组存储。在数组上完成 数据的增删查改 接口的实现 类的成员 打印顺序表 对上述功能进行测试 上述两个功能的测试 所有代码如下 PosOutBoundsException
public class PosOutBoundsException extends RuntimeException{public PosOutBoundsException() {}public PosOutBoundsException(String message) {super(message);}
}SeqList
public class SeqList {private int[] elem;private int usedSize;记录当前顺序表当中 有多少个有效的数据private static final int DEFAULT_CAPACITY2;public SeqList() {this.elem new int[DEFAULT_CAPACITY];}//打印顺序表public void display(){for (int i 0; i this.usedSize; i) {System.out.print(this.elem[i] );}System.out.println();}//新增元素默认在所有数据的结尾处添加public void add(int data){if(isFull()){resize();System.out.println(扩容成功当前容量为this.elem.length);}this.elem[usedSize]data;usedSize;System.out.println(尾部添加元素成功);}public boolean isFull(){return usedSize elem.length;//数组中元素的个数等于数组的长度}private void resize(){elemArrays.copyOf(elem,2*elem.length);//第二个参数为拷贝元素长度如果超出原始数组的长度则补充默认值如int型则补充0}//判断报中是否还有某个元素public boolean contain(int toFind){for (int i 0; i this.usedSize; i) {if(elem[i]toFind){return true;}}return false;}//查找某个元素对应的下标public int indexOf(int toFind){for (int i 0; i this.usedSize; i) {if(elem[i]toFind){return i;}}return -1;}//获取pos位置的数据public int get(int pos){if(!checkPos(pos)){throw new PosOutBoundsException(get 位置不合法);}return elem[pos];}private boolean checkPos(int pos){if(pos0||posusedSize){return false;}return true;}//获取顺序表的长度public int size(){return this.usedSize;}//给pos位置设置为value为更新数据的意思public void set(int pos,int value){if(!checkPos(pos)){throw new PosOutBoundsException(set 位置不合法);}this.elem[pos]value;}//在pos位置新增元素public void add(int pos,int data){if(pos0||posthis.usedSize){throw new PosOutBoundsException(add新增 位置不合法);}if(isFull()){resize();}//pos位置后的数据后移一位for (int i this.usedSize-1; ipos; i--) {this.elem[i1]this.elem[i];}//存this.elem[pos]data;this.usedSize;}//删除第一次出现的数字keypublic void remove(int toRemove){if(isEmpty()){return;}int indexindexOf(toRemove);if(index-1){return;//没有这个数字}for (int i index; i this.usedSize-1; i) {this.elem[i]this.elem[i1];}this.usedSize--;}public boolean isEmpty(){return this.usedSize0;}//清空顺序表public void clear(){this.usedSize0;}
}
Test1.java
class Test35{public static void main(String[] args) {SeqList seqListnew SeqList();seqList.add(1);seqList.add(2);seqList.add(3);seqList.add(4);seqList.add(5);seqList.display();System.out.println(seqList.contain(5));System.out.println(seqList.indexOf(3));System.out.println(seqList.indexOf(7));
/* System.out.println(seqList.size());try{seqList.set(15,9);} catch (PosOutBoundsException e) {e.printStackTrace();System.out.println(我捕获到了一个异常);}*/seqList.display();seqList.add(4,890);seqList.display();seqList.remove(890);seqList.display();}
}ArrayList简介 ArrayList是以泛型方式实现的使用时必须要先实例化 ArrayList底层是一段连续的空间并且可以动态扩容是一个动态类型的顺序表 也可以使用如下创建一个对象 ArrayList的构造 ArrayList常见操作 subList方法会改变原来对象中0位置处的数据截取拿到的是地址 ArrayList的遍历 ArrayList 可以使用3种方式遍历for循环下标、foreach、使用迭代器 ArrayList的扩容机制 按照1.5倍方式扩容 如果用户需要扩容大小 超过 原空间1.5倍按照用户所需大小扩容 ArrayList的具体使用 简单的洗牌算法 运行结果如下 全部代码 Card
public class Card {//结合成为一张牌private String suit;//花色private int rank;//大小public Card(String suit, int rank) {//构造方法this.suit suit;this.rank rank;}//设置和获得一张牌的花色和大小public String getSuit() {return suit;}public void setSuit(String suit) {this.suit suit;}public int getRank() {return rank;}public void setRank(int rank) {this.rank rank;}Overridepublic String toString() {return 【 suit , rank 】;}
}Test
public class Test {//设置花色,用于初始化所有牌private static final String[] SUITS{♥,♠,♣,♦};//初始化所有牌public static ListCard buyCard(){ListCard cards new ArrayList();for (int i 0; i SUITS.length ; i) {for (int j 1; j 13; j) {Card cardnew Card(SUITS[i],j );cards.add(card);}}return cards;}//洗牌 从最后一张牌开始到倒数第二张牌随机的与前面的某一张牌交换public static void shuffle(ListCard cards){Random random new Random();//new了一个用于产生随机数的对象for (int i cards.size()-1; i0 ; i--) {int jrandom.nextInt(i);//产生[0,i)之间的随机数Card tempcards.get(i);cards.set(i,cards.get(j));cards.set(j,temp);}}public static void main(String[] args) {ListCard cards buyCard();System.out.println(cards);shuffle(cards);System.out.println(cards);//3个人每个人轮流揭5张牌//每个人最后会得到5张牌,我们用hand1hand2hand3来存储每个人的5张牌//怎么用来表示每个人呢这里我们用hand表示在hand顺序表中每个元素都是一个人//而每个人都有一个顺序表hand12或者3ListCard hand1new ArrayList();ListCard hand2new ArrayList();ListCard hand3new ArrayList();ListListCard handnew ArrayList();//将hand1hand2hand3添加到hand顺序表中hand.add(hand1);hand.add(hand2);hand.add(hand3);//发牌for (int i 0; i 5; i) {for (int j 0; j 3; j) {//拿走最上面的一张牌Card cardcards.remove(0);hand.get(j).add(card);}}System.out.println(第1个人得到的牌);System.out.println(hand1);System.out.println(第2个人得到的牌);System.out.println(hand2);System.out.println(第3个人得到的牌);System.out.println(hand3);System.out.println(剩余的牌);System.out.println(cards);}}利用ArraryList构造出杨辉三角采用直角三角形的样式 同3个人玩扑克牌一样这里我们也构造出一个二维的顺序表 用ret来存储所有的行list用来存储每一行的元素 运行结果如下 ArrayList的问题及思考