集合概述

对象的存储:①数组(基本数据类型 & 引用数据类型) ②集合(引用数据类型)
数组存储数据的弊端:长度一旦初始化以后,就不可变;
真正给数组元素赋值的个数没有现成的方法可用。


Collection接口

Collection接口 :

方法:
①add(Object obj),addAll(Collection coll),size(),clear(),isEmpty();
②remove(Object obj),removeAll(Collection coll),retainAll(Collection coll),equals(Object obj),contains(Object obj),containsAll(Collection coll),hashCode()
③ iterator(),toArray();

Collection方法测试:

public class TestCollection {@Testpublic void testCollection3() {Collection coll = new ArrayList();coll.add(123);coll.add(new String("AA"));coll.add(new Date());coll.add("BB");coll.add(new Person("MM", 23));Collection coll1 = new ArrayList();coll1.add(123);coll1.add(new String("AA"));// 10.removeAll(Collection coll):从当前集合中删除包含在coll中的元素。coll.removeAll(coll1);System.out.println(coll);//11.equals(Object obj):判断集合中的所有元素是否完全相同Collection coll2 = new ArrayList();coll2.add(123);coll2.add(new String("AA1"));System.out.println(coll1.equals(coll2));//12.hashCode():System.out.println(coll.hashCode());System.out.println();//13.toArray() :将集合转化为数组Object[] obj = coll.toArray();for(int i = 0;i < obj.length;i++){System.out.println(obj[i]);}System.out.println();//14.iterator():返回一个Iterator接口实现类的对象,进而实现集合的遍历!Iterator iterator = coll.iterator();//方式一:不用/*System.out.println(iterator.next());System.out.println(iterator.next());System.out.println(iterator.next());*///方式二:不用
//      for(int i = 0;i < coll.size();i++){//          System.out.println(iterator.next());
//      }//方式三:使用while(iterator.hasNext()){System.out.println(iterator.next());}}@Testpublic void testCollection2() {Collection coll = new ArrayList();coll.add(123);coll.add(new String("AA"));coll.add(new Date());coll.add("BB");// Person p = new Person("MM",23);coll.add(new Person("MM", 23));System.out.println(coll);// 6.contains(Object obj):判断集合中是否包含指定的obj元素。如果包含,返回true,反之返回false// 判断的依据:根据元素所在的类的equals()方法进行判断// 明确:如果存入集合中的元素是自定义类的对象。要求:自定义类要重写equals()方法!boolean b1 = coll.contains(123);b1 = coll.contains(new String("AA"));System.out.println(b1);boolean b2 = coll.contains(new Person("MM", 23));System.out.println(b2);// 7.containsAll(Collection coll):判断当前集合中是否包含coll中所有的元素Collection coll1 = new ArrayList();coll1.add(123);coll1.add(new String("AA"));boolean b3 = coll.containsAll(coll1);System.out.println("#" + b3);coll1.add(456);// 8.retainAll(Collection coll):求当前集合与coll的共有的元素,返回给当前集合coll.retainAll(coll1);System.out.println(coll);// 9.remove(Object obj):删除集合中的obj元素。若删除成功,返回true。否则,返回falseboolean b4 = coll.remove("BB");System.out.println(b4);}@Testpublic void testCollection1() {Collection coll = new ArrayList();// 1.size():返回集合中元素的个数System.out.println(coll.size());// 2.add(Object obj):向集合中添加一个元素coll.add(123);coll.add("AA");coll.add(new Date());coll.add("BB");System.out.println(coll.size());// 3.addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中Collection coll1 = Arrays.asList(1, 2, 3);coll.addAll(coll1);System.out.println(coll.size());// 查看集合元素System.out.println(coll);// 4.isEmpty():判断集合是否为空System.out.println(coll.isEmpty());// 5.clear():清空集合元素coll.clear();System.out.println(coll.isEmpty());}
}

List接口:

存储有序的,可以重复的元素.—相当于“动态”数组

新增的方法:
删除remove(int index) 修改set(int index,Object obj) 获取get(int index)插入add(int index,Object obj)

添加进List集合中的元素(或对象)所在的类一定要重写equals()方法

  • ArrayList(主要的实现类)
  • LinkedList(更适用于频繁的插入、删除操作)
  • Vector(古老的实现类、线程安全的,但效率要低于ArrayList)

Set接口:

存储无序的,不可重复的元素。—相当于高中的“集合”概念

Set使用的方法基本上都是Collection接口下定义的。
添加进Set集合中的元素所在的类一定要重写equals() 和 hashCode()。要求重写equals() 和 hashCode()方法保持一致。

1.无序性:无序性!= 随机性。真正的无序性,指的是元素在底层存储的位置是无序的。
2.不可重复性:当向Set中添加进相同的元素的时候,后面的这个不能添加进去。

  • HashSet(主要的实现类)
  • LinkedHashSet(是HashSet的子类,当我们遍历集合元素时,是按照添加进去的顺序实现的;频繁的遍历,较少的添加、插入操作建议选择此)
  • TreeSet(可以按照添加进集合中的元素的指定属性进行排序)

    • 要求TreeSet添加进的元素必须是同一个类的!
    • 两种排序方式:
      自然排序:
      ①要求添加进TreeSet中的元素所在的类implements Comparable接口
      ②重写compareTo(Object obj),在此方法内指明按照元素的哪个属性进行排序
      ③向TreeSet中添加元素即可。若不实现此接口,会报运行时异常

      定制排序:
      ①创建一个实现Comparator接口的实现类的对象。在实现类中重写Comparator的compare(Object o1,Object o2)方法
      ②在此compare()方法中指明按照元素所在类的哪个属性进行排序
      ③将此实现Comparator接口的实现类的对象作为形参传递给TreeSet的构造器中
      ④向TreeSet中添加元素即可。若不实现此接口,会报运行时异常
      要求重写的compareTo()或者compare()方法与equals()和hashCode()方法保持一致。

Map接口


存储“键-值”对的数据 —-相当于高中的“函数y = f(x)” (x1,y1) (x2,y2)
key是不可重复的,使用Set存放。value可以重复的,使用Collection来存放的。一个key-value对构成一个entry(Map.Entry),entry使用Set来存放。

添加、修改 put(Object key,Object value) 删除remove(Object key) 获取get(Object key) size() / keySet() values() entrySet()

  • HashMap:主要的实现类,可以添加null键,null值
  • LinkedHashMap:是HashMap的子类,可以按照添加进Map的顺序实现遍历
  • TreeMap:需要按照key所在类的指定属性进行排序。要求key是同一个类的对象。对key考虑使用自然排序 或 定制排序
  • Hashtable:是一个古老的实现类,线程安全的,不可以添加null键,null值不建议使用。
    • 子类:Properties:常用来处理属性文件
      附:Properties的使用
      Properties pros = new Properties();
      pros.load(new FileInputStream(new File(“jdbc.properties”)));
      String user = pros.getProperty(“user”);
      System.out.println(user);
      String password = pros.getProperty(“password”);
      System.out.println(password);

Iterator接口

用来遍历集合Collection元素

迭代器测遍历测试:

public class TestIterator {//面试题:@Testpublic void testFor3(){String[] str = new String[]{"AA","BB","DD"};for(String s : str){s =  "MM";//此处的s是新定义的局部变量,其值的修改不会对str本身造成影响。System.out.println(s);}       for(int i = 0;i < str.length;i++){System.out.println(str[i]);}}@Testpublic void testFor2(){String[] str = new String[]{"AA","BB","DD"};for(int i = 0;i < str.length;i++){str[i] = i + "";}for(int i = 0;i < str.length;i++){System.out.println(str[i]);}}//***********************************************//使用增强for循环实现数组的遍历@Testpublic void testFor1(){String[] str = new String[]{"AA","BB","DD"};for(String s:str){System.out.println(s);}}//使用增强for循环实现集合的遍历@Testpublic void testFor(){Collection coll = new ArrayList();coll.add(123);coll.add(new String("AA"));coll.add(new Date());coll.add("BB");coll.add(new Person("MM", 23));for(Object i:coll){System.out.println(i);}}//错误的写法@Testpublic void test2(){Collection coll = new ArrayList();coll.add(123);coll.add(new String("AA"));coll.add(new Date());coll.add("BB");coll.add(new Person("MM", 23));Iterator i = coll.iterator();while((i.next())!= null){//java.util.NoSuchElementExceptionSystem.out.println(i.next());}}//正确的写法:使用迭代器Iterator实现集合的遍历@Testpublic void test1(){Collection coll = new ArrayList();coll.add(123);coll.add(new String("AA"));coll.add(new Date());coll.add("BB");coll.add(new Person("MM", 23));Iterator i = coll.iterator();while(i.hasNext()){System.out.println(i.next());}}
}

Collections工具类

操作Collection及Map的工具类,大部分为static的方法。

第七章:Java_集合相关推荐

  1. 易简无人机巡检照片处理系统(七) ——通用工具集合

    第七章 通用工具集合 作者:zhaingbo 邮箱:zhaingbo@foxmail.com 文章目录 第七章 通用工具集合 7.1. 批量重命名 7.1.1. 批量添加 7.1.2. 批量替换 7. ...

  2. JavaSE 第七章集合 Collection

    第七章集合Collection 7.1 Iterable 接口 首先是集合Collection的的爸爸,列表List的爷爷 Iterable接口. 实现此接口的类队形可以成为for-each循环的目标 ...

  3. MICK-SQL基础教程(第二版)第七章 集合运算

    第七章 集合运算 表的加减法 通过集合运算,可以得到两张表中记录的集合或者公共记录的集合,又或者其中 某张表中的记录的集合.像这样用来进行集合运算的运算符称为集合运算符. 集合运算符会除去重复的记录 ...

  4. 第七个猴子java_黑猴子的家:Java SE 练习题第七章

    尾部都有答案 第七章练习题(多态) (1)下列自'关多态的叙述正确的是哪项?(选两项) A. 父类的引用指向子类的实例是一种多态 B. 子类的引用指向子类的实例是一种多态 C. 接口的引用指向实现该接 ...

  5. 数字图像处理——第七章 小波和多分辨处理

    数字图像处理--第七章 小波和多分辨率处理 文章目录 数字图像处理--第七章 小波和多分辨率处理 写在前面 1 多分辨率处理 1.1 图像金字塔 1.2 多尺度和多分辨率的区别 2 小波 2.1 连续 ...

  6. 开发日记-20190914 关键词 汇编语言王爽版 第七章第八章

    第七章 更灵活的定位内存地址的方法 7.1 and和or指令 (1)and指令:逻辑与指令,按位进行与运算 (2)or指令:逻辑或指令,按位进行或运算 7.2 关于ASCII码 一个文本编辑过程中,就 ...

  7. Linux内核分析 读书笔记 (第七章)

    第七章 链接 1.链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行. 2.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于 ...

  8. 人工智能:第七章 机器学习

    第七章机器学习 教学内容:机器学习是继专家系统之后人工智能应用的又一重要研究领域.本章主要介绍机器学习的有关知识及其主要的几种学习方法,并介绍了知识发现的相关内容. 教学重点:机器学习的基本结构.类比 ...

  9. 数字图像处理:第七章 邻域运算

    第七章 邻域运算 目录 引言 相关与卷积 平滑 中值滤波 边缘检测 细化 作业 1.引言 邻域运算是指当输出图象中每个象素是由对应的输入象素及其一个邻域内的象素共同决定时的图象运算,通常邻域是远比图象 ...

  10. 第七章-NoSQL数据库

    第七章-NoSQL数据库 文章目录 第七章-NoSQL数据库 NoSQL简介 NoSQL VS. 关系数据库 NoSQL的四大类型 键值数据库 列族数据库 文档数据库 图形数据库 不同类型数据库比较 ...

最新文章

  1. 2015年编程之美(资格赛) ---2月29日
  2. 第十三届全国大学生智能汽车竞赛获奖名单
  3. 将指定目录下的sql文件名写入到txt文件中
  4. 英语和数学不好可以学python-Day2 怎么学 Python?
  5. 令牌桶算法和漏桶算法python_图解Python算法
  6. ZH奶酪:自然语言处理工具LTP语言云调用方法
  7. 转载:互联网盈利模式
  8. 自考计算机离散数学,计算机及应用自考资料2014 10 离散数学02324.doc
  9. 运算服务器v9型号,V9服务器
  10. 数据库连接池详解:原理+常用连接池
  11. 软件测试与软件调试的区别
  12. 最好吃的月饼!用Python爬取了某宝1166家月饼进行可视化分析!
  13. Latex表格一格内换行
  14. WEP 加密的工作原理和安全缺陷
  15. Linux下 IPMItool配置方法(MSI主板)
  16. 海思HI3751HiDPTAndroidV200R001 UNF 接口版本差异说明
  17. 使用Git将代码上传到Gitee仓库
  18. 安卓最新版本_腾讯手机管家下载最新版本-腾讯手机管家2020新版本下载v8.8.1 安卓官方版...
  19. Mapbox浅析(快速入门Mapbox)
  20. 拦截器实现网页用户登陆

热门文章

  1. 微信小程序把玩(三十二)Image API
  2. 零起步的Hadoop实践日记(更改hadoop数据存储位置)
  3. 深入 Python :Dive Into Python 中文版 读书笔记 第13,14,15单元测试
  4. BSP技术详解3---有图有真相
  5. OC中使用 static 、 extern、 const使用
  6. 第一份正式工作-华为外包。
  7. Desktop: ERROR: Cannot set priority of namenode process 35122
  8. 流式计算中为什么需要时间戳和WaterMark
  9. 《关于gevent的几点思考》阅读笔记
  10. 批量绘制train和test关于特征上的差异