List (链表|线性表)

特点: 接口,可存放重复元素,元素存取是有序的,允许在指定位置插入元素,并通过索引来访问元素

1、创建一个用指定可视行数初始化的新滚动列表。默认情况下,不允许进行多项选择。

注意,这是 List(rows, false) 的一种便捷方法。还要注意,列表中的可视行数一旦创建就不能更改。

  1. public List(int rows)------------------row-----要显示的项数

2、创建一个初始化为显示指定行数的新滚动列表。

注意,如果指定了零行,则会按默认的四行创建列表。还要注意,列表中的可视行数一旦创建就不能更改。

如果 multipleMode 的值为 true,则用户可从列表中选择多项。如果为 false,则一次只能选择一项。

  1. public List(int rows,boolean multipleMode)-------rows - 要显示的项数。
    -------multipleMode - 如果为 true,则允许进行多项选择;否则,一次只能选择一项。

综上所述:如果抛出为throws-----GraphicsEnvironment.isHeadless(),则返回 true。

Set(集)

特点: 不可以存放重复元素,元素存取是无序的

Collection(接口)

1、特点:描述的是集合共有的功能(描述所有接口的共性)

2、Collection接口有两个子接口:

List(链表|线性表)

Set(集)

集合整理

Collection

我们需要保存若干个对象的时候使用集合。

List

如果我们需要保留存储顺序, 并且保留重复元素, 使用List.

如果查询较多, 那么使用ArrayList

如果存取较多, 那么使用LinkedList

如果需要线程安全, 那么使用Vector

Set

如果我们不需要保留存储顺序, 并且需要去掉重复元素, 使用Set.

如果我们需要将元素排序, 那么使用TreeSet

如果我们不需要排序, 使用HashSet, HashSet比

TreeSet效率高.

如果我们需要保留存储顺序, 又要过滤重复元素, 那么使用LinkedHashSet

Collection接口的共性方法

增加:

1:add()   将指定对象存储到容器中

add 方法的参数类型是Object 便于接收任意对象

2:addAll() 将指定集合中的元素添加到调用该方法和集合中

删除:

3:remove() 将指定的对象从集合中删除

4:removeAll() 将指定集合中的元素删除

修改

5:clear() 清空集合中的所有元素

判断

6:isEmpty() 判断集合是否为空

7:contains() 判断集合何中是否包含指定对象

8:containsAll() 判断集合中是否包含指定集合

使用equals()判断两个对象是否相等

获取:   9:int size()    返回集合容器的大小

转成数组10: toArray()   集合转换数组

实例练习:

  1. 1 //创建Person类
  2. 2 class Person {
  3. 3 private String name;
  4. 4 private int age;
  5. 5
  6. 6 public Person() {
  7. 7
  8. 8 }
  9. 9
  10. 10 public Person(String name, int age) {
  11. 11
  12. 12 this.name = name;
  13. 13 this.age = age;
  14. 14 }
  15. 15
  16. 16 @Override
  17. 17 public int hashCode() {
  18. 18 return this.name.hashCode() + age;
  19. 19 }
  20. 20
  21. 21 @Override
  22. 22 public boolean equals(Object obj) {
  23. 23 if (!(obj instanceof Person)) {
  24. 24 return false;
  25. 25 }
  26. 26 Person p = (Person) obj;
  27. 27 return this.name.equals(p.name) && this.age == p.age;
  28. 28 }
  29. 29
  30. 30 @Override
  31. 31 public String toString() {
  32. 32 return "Person :name=" + name + ", age=" + age;
  33. 33 }
  34. 34
  35. 35 }
  36. 36
  37. 37 public static void main(String[] args) {
  38. 38 Person p1 = new Person("李华", 19);
  39. 39 Person p2 = new Person("尹乐乐", 20);
  40. 40 Person p3 = new Person("洛洛", 18);
  41. 41 Collection list = new ArrayList();
  42. 42 list.add(p1);
  43. 43 list.add(p2);
  44. 44 list.add(p3);
  45. 45 // isEmpty() 判断集合是否为空
  46. 46 boolean empty = list.isEmpty();
  47. 47 System.out.println(empty);
  48. 48 // 返回集合容器的大小
  49. 49 int size = list.size();
  50. 50 System.out.println(size);
  51. 51 // contains()判断集合何中是否包含指定对象
  52. 52 boolean contains = list.contains(p1);
  53. 53 System.out.println(contains);
  54. 54
  55. 55 // remove(); 将指定的对象从集合中删除
  56. 56 list.remove(p1);
  57. 57
  58. 58 // clear() 清空集合中的所有元素
  59. 59 list.clear();
  60. 60 System.out.println(list);
  61. 61
  62. 62 }

分析总结:

1:Person类

1:姓名和年龄

2:重写hashCode和equals方法

1、如果不重写,调用Object类的equals方法,判断内存地址,为false

2、如果是Person类对象,并且姓名和年龄相同就返回true

3、如果不重写,调用父类hashCode方法,如果equals方法相同,那么hashCode也要相同,需要重写hashCode方法

3:重写toString方法

注:不重写,直接调用Object类的toString方法,打印该对象的内存地址

注:list、ArrayList、LinkedList、Vector的区别

1、List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引。

List:特有的方法,凡是可以操作角标的方法都是该体系特有的方法。

2、ArrayList:1、底层的数据结构使用的是数组结构(数组长度是可变的百分之五十延长)。

2、特点:是查询很快,但增删较慢,线程不同步(数组查询快的原因是:数组的内存空间地址是连续的)。

3、ArrayList底层维护了一个Object[] 用于存储对象,默认数组的长度是10,当默认的或者指定的容量不够存储对象的时候,容量自动增长为原来的容量的1.5倍。

4、单线程效率高。

实例:  去除ArrayList集合中重复元素

1:存入字符串元素

2:存入自定义对象元素(如Perosn对象)

原理:

循环遍历该集合,每取出一个放置在新的集合中,放置之前先判断新的集合是否以包含了新的元素。

  1. public class Demo2 {
  2. public static void main(String[] args) {
  3. ArrayList arr = new ArrayList();
  4. Person p1 = new Person("jack", 20);
  5. Person p2 = new Person("rose", 18);
  6. Person p3 = new Person("rose", 18);
  7. arr.add(p1);
  8. arr.add(p2);
  9. arr.add(p3);
  10. System.out.println(arr);
  11. ArrayList arr2 = new ArrayList();
  12. for (int i = 0; i < arr.size(); i++) {
  13. Object obj = arr.get(i);
  14. Person p = (Person) obj;
  15. if (!(arr2.contains(p))) {
  16. arr2.add(p);
  17. }
  18. }
  19. System.out.println(arr2);
  20. }
  21. }
  22.  
  23. class Person {
  24. private String name;
  25. private int age;
  26.  
  27. public Person() {
  28.  
  29. }
  30.  
  31. public Person(String name, int age) {
  32.  
  33. this.name = name;
  34. this.age = age;
  35. }
  36.  
  37. public String getName() {
  38. return name;
  39. }
  40.  
  41. public void setName(String name) {
  42. this.name = name;
  43. }
  44.  
  45. public int getAge() {
  46. return age;
  47. }
  48.  
  49. public void setAge(int age) {
  50. this.age = age;
  51. }
  52.  
  53. @Override
  54. public int hashCode() {
  55. return this.name.hashCode() + age * 37;
  56. }
  57.  
  58. @Override
  59. public boolean equals(Object obj) {
  60. if (!(obj instanceof Person)) {
  61. return false;
  62. }
  63. Person p = (Person) obj;
  64.  
  65. return this.name.equals(p.name) && this.age == p.age;
  66. }
  67.  
  68. @Override
  69. public String toString() {
  70. return "Person@name:" + this.name + " age:" + this.age;
  71. }
  72.  
  73. }

3、LinkedList:底层的数据结构是链表结构(特点是查询较慢,增删较快)。

特有方法:addFirst(E e)、getFirst(E e) 、removeFirst(E e)

如果集合中没有元素,获取或者删除元素抛:NoSuchElementException

4、Vector:1、底层是数组数据结构 线程同步(数组长度是可变的百分之百延长),(无论查询还是增删都很慢,被ArrayList替代了)

2、多线程安全的,所以效率低。

3、特有的方法:

void addElement(E obj)  在集合末尾添加元素

E elementAt( int index) 返回指定角标的元素

Enumeration elements()  返回集合中的所有元素,封装到Enumeration对象中测试此枚举是否包含更多的元素。

E nextElement()    如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

Enumeration 接口: boolean hasMoreElements()

注:1、可以使用该集合去模拟出队列(先进先出) 或者堆栈(后进先出) 数据结构,堆栈(后进先出)。

2、有一批数据要存储,要求存储这批数据不能出现重复数据,ArrayList、LinkedList都没法满足需求。解决办法:使用 set集合。

数据结构

1:栈 (1.6)

先进后出

push()

pop()

2:队列(双端队列1.5)

先进先出

offer()

poll()

3:返回逆序的迭代器对象   descendingIterator()   返回逆序的迭代器对象

  1. //迭代
  2. import java.util.Iterator;
  3. import java.util.LinkedList;
  4.  
  5. public class Demo3 {
  6. public static void main(String[] args) {
  7. LinkedList list = new LinkedList();
  8. list.add("微信");
  9. list.add("微博");
  10. list.add("淘宝");
  11. list.add("京东");
  12. list.add("阿里巴巴");
  13. Iterator it = list.iterator();
  14. // Iterator it = list.descendingIterator();//逆序迭代
  15. while (it.hasNext()) {
  16. String next = (String) it.next();
  17. System.out.println(next);
  18. }
  19. }
  20. }

集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结的更多相关文章

  1. ArrayList,LinkedList,vector的区别

    1,Vector.ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储. 2.List中的元素有序.允许有重复的元素,Set中的元素无序.不允许有重复元素. ...

  2. Hashtable,HashMap,TreeMap有什么区别?Vector,ArrayList,LinkedList有什么区别?int和Integer有什么区别?

    接着上篇继续更新. /*请尊重作者劳动成果,转载请标明原文链接:*/ /*https://www.cnblogs.com/jpcflyer/p/10759447.html* / 题目一:Hashtab ...

  3. ArrayList,LinkedList,Vector集合的认识

    最近在温习Java集合部分,花了三天时间读完了ArrayList与LinkedList以及Vector部分的源码.之前都是停留在简单使用ArrayList的API,读完源码看完不少文章后总算是对原理方 ...

  4. Java中的集合List、ArrayList、Vector、Stack(三)

    List接口 List集合代表一个有序集合,集合中每一个元素都有其对应的顺序索引.List集合容许使用重复元素,可以通过索引来访问指定位置的集合对象. ArrayList和Vector实现类 Arra ...

  5. 一、基础篇--1.2Java集合-ArrayList和Vector的区别

     ArrayList和Vector的区别 ArrayList和Vector都是基于动态数组实现的.  区别 ArrayList是非线程安全的,Vector是线程安全的. Vector的方法都加了同步锁 ...

  6. ArrayList和Vector的区别

    3.ArrayList和Vector的区别 答: 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种 ...

  7. ArrayList LinkedList Vector

    ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList, Lin ...

  8. ArrayList, LinkedList, Vector - dudu:史上最详解

    ArrayList, LinkedList, Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别.BZ的JDK版本是1.7.0 ...

  9. ArrayList和Vector的区别?HashMap和HashTable的区别?StringBuilder、StringBuffer和String的区别?

    ArrayList和Vector的区别?从两个方面 1.同步性:ArrayList是线程不安全的,是非同步的:Vector是线程安全的,是同步的.(Java中线程的同步也就满足了安全性) 2.数值增长 ...

随机推荐

  1. c# 修饰词public, protected, private,internal,protected的区别

    public:  对任何类和成员都公开, 无限制访问;protected: 仅仅对该类以及该类的派生类公开;private: 仅仅对该类公开;internal: 只能值包含该类的程序集中访问该类(只是 ...

  2. storm 原理简介及单机版安装指南——详细版【转】

    storm 原理简介及单机版安装指南 本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial 原文链接自:http://www.open-op ...

  3. Arima拟合函数,se出现NaN问题

    R语言Arima函数拟合模型,se(标准误)出现NaN的问题. 参考了网上的资料,虽然不太明白是什么意思,但是这样的模型不能用. 参考:http://stackoverflow.com/questio ...

  4. Nginx设置Js、Css等静态文件的缓存过期时间

    location ~.*\.(js|css|html|png|jpg)$ { expires 3d; } expires    3d; //表示缓存3天 expires    3h; //表示缓存3小 ...

  5. Javascript 多浏览器兼容性问题及解决方案

    一.document.formName.item(”itemName”) 问题 问题说明:IE下,可以使用 document.formName.item(”itemName”) 或 document. ...

  6. BZOJ4531: [Bjoi2014]路径

    Description 在一个N个节点的无向图(没有自环.重边)上,每个点都有一个符号, 可能是数字,也可能是加号.减号.乘号.除号.小括号.你要在这个图上数 一数,有多少种走恰好K个节点的方法,使得 ...

  7. Invalid escape sequence(valid ones are \b \t \n \f \r \" \' \\)

    Invalid escape sequence(valid ones are \b \t \n \f \r \" \' \\) 在运行eclipse的相关程序代码时遇到了报错信息,查看控制台 ...

  8. Linux文件锁flock

    Linux文件锁flock 在多个进程同时操作同一份文件的过程中,很容易导致文件中的数据混乱,需要锁操作来保证数据的完整性,这里介绍的针对文件的锁,称之为“文件锁”-flock. flock,建议性锁 ...

  9. android-BaseAdapter自定义控件深刻理解

    一.自定义控件的实现 自定义控件需要继承BaseAdapter抽象类,该类实现了ListAdapter, SpinnerAdapter两个接口,这两个接口继承了Adapter接口类,没错.是继承Ada ...

  10. Java 中的转义字符

    注意斜杠方向,为键盘右上角的斜杠 \t 在当前编辑位置插入一个 tab \b 在当前编辑位置插入一个空格 \n 换行(在当前编辑位置插入 a newline) \r 在当前编辑位置插入一个回车     ...