互联网门户网站建设,网站建设计入什么费用,seo描述是什么意思,分销系统多少钱一套一、list概述
1、list接口概述
List接口继承自Collection接口#xff0c;是单列集合的一一个重要分支#xff0c;我们习惯性地会将实现了 List接口的对象称为List集合。在List集合中允许出现重复的元素#xff0c;所有的元素是以一种线性方 式进行有序存储的#xff0c;在…一、list概述
1、list接口概述
List接口继承自Collection接口是单列集合的一一个重要分支我们习惯性地会将实现了 List接口的对象称为List集合。在List集合中允许出现重复的元素所有的元素是以一种线性方 式进行有序存储的在程序中可以通过索弓|来访问集合中的指定元素。
2、list接口的特点
有序可重复 有索引 可以判断重复
➢它是一个元素存取有序的集合。例如存元素的顺序是11、22、33。那么集合中元素的 存储就是按照11、22、 33的顺序完成的)。 有序重复 ➢它是一个带有索引的集合通过索引就可以精确的操作集合中的元素(与数组的索引是一个 道理) 有索引 ➢集合中可以有重复的元素通过元素的equals方法来比较是否为重复的元素。
3、ArryList常用的接口方法
List作为Collection集合的子接口不但继承了Collection接口中的全部方法而且还增加 了一些根据元素索引来操作集 合的特有方法。
1、将指定的元素添加到该集合中的指定位置上
public void add(int index, E element);2、返回集合中指定位置的元素
public E get(int index) ;3、移除列表中指定位置的元素返回的是被移除的元素
public E remove(int index) ;4、用指定元素替换集合中指定位置的元素返回值的更新前
public E set(int index, E element) :5、返回列表中指定的fromIndex (包括)和tolndex (不包括)之间的部分内容
public ListE subList(int fromIndex, int tolndex):6、找到集合中这个元素的下标位置
public int indexOf(Object o):二 、list demo
/*** * List接口里面方法的基本操作* 1、List是有序且重复的并且带索引的接口* 2、List的常见方法的演示* 3、list里面的remove方法有两个方法的重载分别是参数是int类型的index* 和参数是Object类型的对象那么如果是一个Integer作为泛型的集合对象的话你* 写的是整型那么它会调用哪个方法呢* 这里就必须要理解此时它不需要自动装箱就能调用方法的话它就不会去进行自动装箱* 所以会调用参数是int类型的index的方法**/
public class ListDemo {public static void main(String[] args) {//构建一个List对象ListString list new ArrayListString();list.add(中国);list.add(美国);list.add(俄罗斯);//带下标的add方法下标就是你想要放入的位置的下标list.add(1, 德国);list.add(德国);list.add(null);System.out.println(list);//list接口下的其他方法//get方法System.out.println(list.get(1));//indexOfSystem.out.println(list.indexOf(美国));//subListSystem.out.println(list.subList(1, 3));//setlist.set(list.size()-1, 日本);System.out.println(list);//removelist.remove(list.size()-1);System.out.println(list);list.remove(德国);//请问如果list集合中存在重复的元素那么remove会都删掉吗System.out.println(list);//只会删除第一个查找到的元素ListInteger list1 new ArrayListInteger();list1.add(1);list1.add(2);list1.add(3);list1.add(4);list1.remove(1);//请问这个1是object还是indexSystem.out.println(list1);}
}
三、list 的接口实现类
1、ArryList
ArrayList类的底层存储结构是数组结构。
可以直接通过下标来很迅速的找到指定下标的元素来进行操作
所以ArrayList在操作指定下标的任意元素上面速度比较快。 注意: 日常开发中程序员会习惯使用ArrayList来解决所有集合的问题但是一定要注意 它的底层是数组的特点决定于它只是查找上以及指定下标操作。上速度快。
2、LinkedList
底层是双向链表既然底层是双向链表所以我们在使用LinkedList来操作对象的时候首 部和尾部元素的操作速度比较快。
3、Vector
ArrayList类出现之前的版本ArrayList出现之后 就不再使用Vector了它和ArrayList的 区别基本等同于StringBuffer和StringBuilder的区别。
四、LinkedList
只要涉及到首尾操作频繁的容器就去找LinkedList的API方法即可否则只管用ArrayList。
public class LinkedListDemo {public static void main(String[] args) {//List接口的特点在这里得到了体现有序、重复可以为nullLinkedListString list new LinkedListString();list.add(aaa);list.add(bbb);list.add(ccc);list.add(null);list.add(aaa);System.out.println(list);//进行LinkedList里面的API方法的操作//添加到首部、尾部list.addFirst(kkk);System.out.println(list);list.addLast(zzz);System.out.println(list);//获取到首部和尾部的元素System.out.println(list.getFirst());System.out.println(list.getLast());//删除首部和尾部的元素list.removeFirst();System.out.println(list);list.removeLast();System.out.println(list);//弹栈栈这个数据结构堆柴火while(!list.isEmpty()) {//把集合顶部的元素弹出来System.out.println(list.pop());}System.out.println(list);}
}
五、单向链表
原理: 多个结点之间通过地址进行连接。例如多个人手拉手 每个人使用自己的右手拉住下个人的左手依次类推这样多个 人就连在一起了。 特点: 查找元素慢增删元素快。
/*** * 演示单向链表* 所谓单向链表我们可以看成是多个环扣在一起但是只能作用第一个环一旦你作用了第一个* 环那么就会直接影响到剩下的所有环这里是不允许你操作最后一个环的因为双向链表就是* 可以允许你首尾都操作**/
public class SingleLinkedListDemo {public static void main(String[] args) {//创建一个首部节点Node head new Node(黑桃A);//在当前节点上构建下一个节点对象head.next new Node(红桃J);//继续往下面构建节点head.next.next new Node(梅花3);head.next.next.next new Node(方块8);System.out.println(head);}
}
class Node{//定义一个Object类型的属性用来为每个环起名字Object value;//既然每个环可以操作下一个环那么我们是否可以认为每个环拥有下个环对象Node next;//创建一个有参的构造函数public Node(Object value) {this.value value;}//重写toString方法方便我们来看到整体的结构Overridepublic String toString() {return nextnull?value.toString():value.toString()next.toString();}
}六、链表内存图例 七、arraylist和linkedlist 运行方式比较 八、demo
千千静听播放列表(控制台版) a、写一个song类 里面有歌名和歌手 b、写一个demo类使用集合为容器往里面插入一些歌曲 C、然后来进行一个人性化的操作里面有查看、追加、查找、删除、删除全部、退出等功能 d、要求各个操作尽量的人性化 附加功能:如何才能真正的播放出音乐呢?
public class Song {private String songName;private String songAuthor;public Song() {}public Song(String songName, String songAuthor) {super();this.songName songName;this.songAuthor songAuthor;}public String getSongName() {return songName;}public void setSongName(String songName) {this.songName songName;}public String getSongAuthor() {return songAuthor;}public void setSongAuthor(String songAuthor) {this.songAuthor songAuthor;}Overridepublic int hashCode() {final int prime 31;int result 1;result prime * result ((songAuthor null) ? 0 : songAuthor.hashCode());result prime * result ((songName null) ? 0 : songName.hashCode());return result;}Overridepublic boolean equals(Object obj) {if (this obj)return true;if (obj null)return false;if (getClass() ! obj.getClass())return false;Song other (Song) obj;if (songAuthor null) {if (other.songAuthor ! null)return false;} else if (!songAuthor.equals(other.songAuthor))return false;if (songName null) {if (other.songName ! null)return false;} else if (!songName.equals(other.songName))return false;return true;}Overridepublic String toString() {return songName_songAuthor;}
}
public class SongDemo {public static void main(String[] args) {ArrayListSong songs initSongs();//输出欢迎语句System.out.println(欢迎使用XXXX播放器);//创建一个Scanner对象Scanner sc new Scanner(System.in);//设置一个死循环while(true) {System.out.println(请输入你要进行的操作1.查看;2.追加;3.查找;4.删除;5.删除所有;6.退出);int order sc.nextInt();boolean flag false;switch(order) {case 1:if(songs.isEmpty()) {System.out.println(你的播放列表为空);}else {System.out.println(songs);};break;case 2:System.out.println(请输入你要添加的歌曲名和歌手名);String songName sc.next();String songAuthor sc.next();Song newSong new Song(songName,songAuthor);if(songs.contains(newSong)) {System.out.println(您的播放列表中已经存在该歌曲是否要继续添加进列表(1为添加,2为不添加));int newOrder sc.nextInt();if(newOrder1) {songs.add(newSong);System.out.println(歌曲添加成功);}}else {songs.add(newSong);System.out.println(歌曲添加成功);};break;case 3:System.out.println(请输入您要查找的歌手名);String author sc.next();//定义一个集合用来放查找到的Song对象的ArrayListSong newList new ArrayListSong();for(Song s:songs) {if(s.getSongAuthor().equals(author)) {newList.add(s);}}if(newList.isEmpty()) {System.out.println(对不起您要查找的歌手没有对应的数据);}else {System.out.println(newList);};break;case 4:System.out.println(请输入您要删除的歌曲名和歌手名);String songName1 sc.next();String songAuthor1 sc.next();Song newSong1 new Song(songName1,songAuthor1);if(songs.contains(newSong1)) {//如果没有重写equals方法的话那么这里就会出问题songs.remove(newSong1);System.out.println(删除成功);}else{System.out.println(对不起您要删除的歌曲不存在);};break;case 5:System.out.println(你确定要删除所有歌曲吗(1.确定;2.考虑下));int order1 sc.nextInt();if(order11) {songs.clear();System.out.println(删除成功);};break;case 6:System.out.println(你确定要退出那么好玩的游戏吗(1.确定;2.考虑下));int order2 sc.nextInt();if(order21) {System.out.println(欢迎下次继续来使用本软件够的败);flag true;};break;default:System.out.println(您所输入的指令不正确请重新输入);}if(flag) {break;}}}//初始化一个有歌曲的播放器public static ArrayListSong initSongs(){ArrayListSong songs new ArrayListSong();songs.add(new Song(忘情水,刘德华));songs.add(new Song(练习,刘德华));songs.add(new Song(饿狼传说,张学友));return songs;}
}