思考题:

1.Set和List有哪些区别?
List是有序的可重复的Collection,使用此接口能够精确的控制每个元素插入的位置。能够使用索引高效地访问List中的元素,这类似于Java的数组。Set是一种无序的不包含重复元素的Collection,相比List,它可以更高效地处理增添和删除元素。

2.Collection与Collections有什么区别?
Collection是集合类的上级接口,继承于他的接口主要有Set和List,Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

3. Iterator和ListIterator的区别是什么?
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引等。

4. Enumeration接口和Iterator接口的区别有哪些?
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。

5. 使用泛型的好处是什么?
它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。程序的可读性和健壮性更高。

Collection接口是List、Set和Queue等接口的父接口,该接口里定义的方法既可用于操作List集合,也可用于操作Set和Queue集合。(用于存储单个对象)

List接口:1.List集合中元素是有序的且可重复的,相当于数学里面的数列,有序可重复。2.允许多个null元素。3.实现类常用的有ArratyList,Vector,LinkedList.(使用此接口能够精准的控制每一个元素插入的位置,用户可以通过索引来访问集合中的指定元素,List集合还有一个特点就是元素的存入顺序与取出顺序相一致)。

  • ArrayList集合:ArrayList是List的主要实现类,它是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List接口,提供了相关的增删改查等功能。但是因为它的底层是用数组实现的,所以插入和删除操作效率不佳,不建议ArrayList做大量增删操作,但由于它有索引,所以查询效率很高,适合做大量的查询操作。
  • LinkedList实现类:解决了ArrayList的方法,即使用了List和Deque两个接口的实现类----LinkedList。底层数据结构是基于双向循环链表的,且头节点中不存放数据,对于大量的增删操作,建议使用LinkedList,效率较高。

Set集合中元素是无序的、不可重复的。Set接口也是继承自Collection接口,但它没有对Collection接口的方法进行扩充。具有无序性(元素在底层存储位置是无序的)。Set接口的主要实现类是HashSet和TreeSet。

  • 不排序且不用保证顺序,HashSet,HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此高效的存取。
  • 排序,TreeSet,底层是用二叉树来实现元素存储的,它可以对集合中的元素排序。(注:如果把一个对象添加进TreeSet集合,则该对象必须实现Comparable接口,否则程序会抛出ClassCastException异常。)
  • 不排序但要保证顺序,LinkedHashSet。

动态数组的实现(小鸡类)

package com.eight;/*** 对象数组与管理*  使用对象数组实现多个Chicken的管理*   动态数组:*   1.数组是一种线性数据结构*  2.数组不适合做删除插入等操作,适合添加,查找,遍历*/
import java.util.Arrays;
public class eightD {public static void main(String[] args) {ChickenManager cm = new ChickenManager(5);//添加cm.add(new Chicken(1,"小小",10));cm.add(new Chicken(2,"小二",8));cm.add(new Chicken(3,"小三",6));cm.add(new Chicken(4,"小红",2));cm.add(new Chicken(5,"小奋",4));cm.add(new Chicken(6,"小灰",1));System.out.println("数组的长度是"+cm.length());System.out.println("-----------printAll----------");cm.printAll();System.out.println("-----------find----------");Chicken c = cm.find(5);System.out.println(c.toString());System.out.println("-----------update----------");cm.update(new Chicken(1,"大大",20));cm.printAll();System.out.println("-----------delete----------");cm.delete(5);cm.printAll();}
}
//小鸡管理类
class ChickenManager{private Chicken[] cs = null;private int count = 0;//记录当前数组的元素个数(下标)public ChickenManager(int size){if(size>0){cs = new Chicken[size];}else{cs = new Chicken[5];}}//输出数组长度public int length(){return cs.length;}//添加:实现动态数组public void add(Chicken c){if (count >= length()){//数组已满,需要扩充//算法1:cs.length*3/2+1;//算法2:cs.length*2int newlen = cs.length*2;cs = Arrays.copyOf(cs,newlen);}cs[count] = c;count++;}//删除public void delete(int id){for (int i = 0; i < count; i++) {if (cs[i].getId() == id){//找到要删除的对象,把该对象之后的对象向前移for (int j = 0; j < count-1; j++) {cs[j] = cs[j+1];}//把最后一个对象赋值为空(删除)cs[count-1] = null;count--;break;}}}//修改public void update(Chicken c){Chicken temp = find(c.getId());if (temp != null){temp.setName(c.getName());temp.setAge(c.getAge());}}//查找public Chicken find(int id){for (int i = 0; i < count; i++) {if (cs[i].getId() == id){return cs[i];}}return null;}//查找所有public void printAll(){for (int i = 0; i < count; i++) {System.out.println(cs[i].toString());}}
}//小鸡类(数据对象)
class Chicken{private int id;private String name;private int age;@Overridepublic String toString() {return "Chicken{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Chicken(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public Chicken() {}
}

从键盘输入10个整数保存到List中,并按从大到小的顺序倒序显示。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;public class eightE {public static void main(String[] args) {List<Integer> list = new ArrayList<>();Scanner scanner = new Scanner(System.in);for (int i = 0; i < 10; i++) {System.out.println("请输入第"+(i+1)+"个数");list.add(scanner.nextInt());}for (int i = 9; i >= 0; i--) {System.out.println(list.get(i)+"\t");}Collections.sort(list);System.out.println("默认从小到大"+list);Collections.reverse(list);list.forEach(s->System.out.print(s+"-"));}
}

JAVA程序设计----集合基础之Collection相关推荐

  1. JAVA程序设计----集合基础之Map

    Map接口不是继承Collection接口,它与Collection接口是并列存在的,用于储存键-值对(key-value)形式的元素,描述了有不重复的键到值的映射. Map中的key(键)和valu ...

  2. Java程序设计——集合框架

    目录 一.概述 Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是List和Set.其中,List的特点是元素有序.元素可重复.Set的特点是元素 ...

  3. Java程序设计--集合(下)(十三)

    集合 1.Set系列集合 1.1 Set系列集合概述 1.2 HashSet元素无序的底层原理 1.3 HashSet元素去重复的底层原理 1.4 实现类:LinkedHashSet 1.5 实现类: ...

  4. Java程序设计语言基础01:绪论

    目录 1. 初探HelloWorld程序 1.1 类(Class)语法元素 1.2 main方法(main method)语法元素 1.3 System.out.println 1.4 字符串 2. ...

  5. java collections_Java集合基础的详细介绍(二)

    七.Collections工具类 Collections 是一个操作 Collection 和 Map 等集合的工具类.Collections 中提供了一系列静态的方法对集合元素进行排序.查询和替换等 ...

  6. java之集合框架一Collection接口

    1.集合的由来: 我们学习的是面向对象的语言.而面向对象语言对事物的描述是通过对象体现的.为了方便对多个对象进行操作,我们就必须把多个对象进行存储.而要想存储多个对象,就不能是一个基本的变量,而应该是 ...

  7. java程序设计_JAVA基础程序设计之方法

    1 基本概念 Java 方法是语句的集合,它们在一起执行一个功能. l 方法是解决一类问题的步骤的有序组合 l 方法包含于类或对象中 l 方法在程序中被创建,在其他地方被引用 1.1 方法的定义 一般 ...

  8. JAVA程序设计----数组基础

    一些小思考题: 1.什么时候为数组分配内存? 数组在初始化时分配内存 2.数组一旦被创建,大小能不能改变? 数组一旦被创建,它的大小就不能改变,可以使用array.length的得到数组的大小. in ...

  9. Java程序设计语言基础04:数组

    目录 1. 数组基础 1.1 创建数组 1.2 使用数组 2. 数组的"名"与"实" 2.1 数组的"名" 2.2 数组的"实&q ...

最新文章

  1. python3转为unicode编码_「小技能get记」· 如何用python3解码unicode
  2. java master work_并发编程之Master-Worker模式
  3. 图像传感器与信号处理——自动曝光算法
  4. 第三方工具Jdom解析XML
  5. 谈谈接入各种第三方推送平台的技术方案和坑点
  6. 魔百盒哪款型号配置高_松下负离子吹风机怎么样哪款好?推荐型号?2020年9月松下负离子电吹风选购攻略...
  7. python可以处理哪些文件_Python(文件处理)
  8. 关于collectionView的一些内容
  9. 《编写可维护的JavaScript》——JavaScript编码规范(七)
  10. 学习JSON的神级网站www.bejson.com
  11. HashMap底层实现原理
  12. 12306余票查询(六)——优化页面结构,加入js请求数据部分
  13. LR字符串截取lr_save_var
  14. python剪刀石头布小游戏源码下载_Python Tkinter实现剪刀石头布小游戏
  15. E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用
  16. 为字体文件增添自定义图标
  17. 计算机中丢失fmodex64.dll,fmodex.dll修复工具
  18. html怎么添加视频链接,微光如何添加视频链接
  19. Harry Potter and the Chamber of Secrets
  20. 天池实验室安装库时遇到的问题

热门文章

  1. CH - 4901 关押罪犯(二分图判定+二分/并查集)
  2. 分治法——巨人与鬼问题
  3. 机器学习-机器学习概论(入门机器学习基础知识)
  4. register---C语言中最快的关键字
  5. 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
  6. 深刻好文|关于资产与负债的思考(国庆活动开启)
  7. 深入理解Linux内核之主调度器
  8. 为什么字节跳动选择使用 Go 语言?
  9. 《深入理解Kafka:核心设计与实践原理》笔误及改进记录
  10. Linux线程(五)