/**
* 1
* @hashCode&equals的处理:
* 1-只要覆写了equals,必须复写hashCode.
* 2-因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须覆写这两个方法
* 3-如果自定义对象作为Map的键,那么必须覆写hashCode和equals
* @注意:String因为覆写了hashCode和equals方法,所以可以直接作为key使用
*/
public class day1019 {
public static void main(String[] args) {
Map<Item1,String> hashmap = new HashMap<Item1, String>();
hashmap.put(new Item1("f1","f2"),"it1");
hashmap.put(new Item1("f1","f2"),"it1");
/**
* hashMap使用put方法之前会调用hash方法取获取key的hashCode值,
* 然后根据hash方法返回的boolean值来决定put操作
*/
System.out.println(hashmap.size());//没有继承equals和hashcode的时候是2
//继承之后是1
}
} class Item1{
private String field1;
private String field2; public Item1(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
} public String getField1() {
return field1;
} public void setField1(String field1) {
this.field1 = field1;
} public String getField2() {
return field2;
} public void setField2(String field2) {
this.field2 = field2;
} /**
* 按照默认的重载equals和hashcode
* @param o
* @return
*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; Item1 item1 = (Item1) o;
/**
* 还比较了里面属性的值是否一致
*/
if (field1 != null ? !field1.equals(item1.field1) : item1.field1 != null) return false;
return field2 != null ? field2.equals(item1.field2) : item1.field2 == null;
} @Override
public int hashCode() {
int result = field1 != null ? field1.hashCode() : 0;
result = 31 * result + (field2 != null ? field2.hashCode() : 0);
return result;
}
}
public class SetLearning {

    public static void main(String[] args) {
/**2
* 判断所有集合内部的元素是否为空,使用isEmpty()方法,而不使用size() = 0;
* 原因:某些集合,前者的复杂度为O(1)
*/
Map<String ,String> stringMap = new HashMap<>();
if (stringMap.isEmpty()){
System.out.println("no element");
} /**3
* 使用java.util.stream.Collectors类的toMap()方法转为Map集合时
* 一定要使用含参数类型为BinaryOperator,参数名为mergeFunction的方法,
* 否则当出现相同key值时会抛出IllegalStateException异常
*/ /**4
* 使用java.util.stream.Collectors类的toMap()方法转为Map集合时
* 当value为null时会抛NPE异常
*/
}
}
/**5
* ArrayList的subList结果不可强转为ArrayList,否则抛异常ClassCastException;
* @注意:sublist()返回的是ArrayList内部类Sublist,并不是ArrayList本身,而是一个视图
*/
public class day10191 {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<String>();
arrayList.add("1");
arrayList.add("2");
arrayList.add("3");
arrayList.add("4");
System.out.println(arrayList);
try{
ArrayList<String> a = (ArrayList<String>) arrayList.subList(0,2);
}catch (Exception e){
System.out.println(e.getMessage());
}
List<String> list = arrayList.subList(0,2);
System.out.println(arrayList);
System.out.println(list);
}
/**
* re:
* [1, 2, 3, 4]
* java.util.ArrayList$SubList cannot be cast to java.util.ArrayList
* [1, 2, 3, 4]
* [1, 2]
*/
}
/**
*14
* 不要再foreach循环进行元素的remove和add操作,
* @remove元素使用Iterator方式
* 如果并发操作,需要对Iterator对象加锁
*/
public class day10193 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("x");
list.add("x");
list.add("y");
list.add("y");
list.add("z");
list.add("z");
// for (int i = 0; i < list.size(); i++) {
// String s = list.get(i);
// if (s.equals("z")){
// list.remove(s);//执行这个的时候,其实list的长度会变化,元素会前移
// }
// }
System.out.println(list);//[x, x, y, y, z]
// 正确的方法:
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String next = iterator.next();
if (next.equals("z")){
iterator.remove();
}
}
System.out.println(list); }
}

java-规约-集合的更多相关文章

  1. 【Java】集合_学习笔记

    一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...

  2. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  3. 谈谈Java的集合组件

    让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...

  4. java.util 集合框架集合

    java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...

  5. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  6. Java学习-集合(转)

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

  7. java的集合框架之一

    java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...

  8. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

  9. Java之集合初探(一)

    一.集合概述.区别 集合是一种容器,数组也是一种容器 在Java编程中,装各种各样的对象(引用类型)的叫做容器. 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的 ...

  10. Java面向对象 集合(下)

      Java面向对象 集合(下) 知识概要:               (1)Map集合的体系结构 (2)Map集合的方法 (3)HashMap TreeMap (4)集合框架中的常用工具类 ( ...

随机推荐

  1. ASP.NET Core 6框架揭秘实例演示[11]:诊断跟踪的几种基本编程方式

    在整个软件开发维护生命周期内,最难的不是如何将软件系统开发出来,而是在系统上线之后及时解决遇到的问题.一个好的程序员能够在系统出现问题之后马上定位错误的根源并找到正确的解决方案,一个更好的程序员能够根 ...

  2. 金融行业BI可视化报表,直观体验数据的价值

    现在,数据已成为非常重要的资产.之前,人们只是把它当作一种附属品,由客户来办理业务,在系统中产生了这样的附属品.但如今,发现在客户办理业务这一信息中,蕴藏着一些客户的需求,积聚成千条这种信息,可以洞察 ...

  3. 大数据时代变局与机遇,BI数字化转型的实战攻略!

    党的十九大报告提出,要推动互联网.大数据.人工智能和实体经济深度融合.更加高效地获取.运用信息,成为企业具有强大竞争力的重要标志.我国企业应牢牢把握历史性机遇,以更加开放的姿态,积极拥抱新经济,积极参 ...

  4. 为什么有些BI工具做数据可视化项目频频失败?

    现如今数据可视化可谓是非常之火,随着硬件价格的一降再降,仿佛做数据可视化项目,你没有数据大屏,你就没有逼格.理想很丰满,现实很骨感,并不是每一个数据可视化项目都能够成功.数据可视化项目的进行,无外乎是 ...

  5. 批量自动化配置Dell服务器idrac管理口IP

    背景说明 工作中经常会遇到一次上几十台.几百台服务器的情况 每当到这个时候小伙伴们拿台笔记本和一根网线,一台服务器.一台服务器的去修改idrac IP 为了节约这个工作量,利用dell的racadm工 ...

  6. Redis学习笔记(详细)

    目录 概述 Redis安装启动 常用五大数据类型 Redis键(key) Redis字符串(String) Redis列表(List) Redis集合(Set) Redis哈希(Hash) Redis ...

  7. Pycharm:注释、删除所有注释

    1.# 单行注释 2. ''' 多行注释 ''' 3.删除所有注释 CTRL+R进入替换模式,勾选右上角正则表达式,然后在搜索框输入  #.*,Replace All即可

  8. MySQL函数及存储过程

    MySQL函数及存储过程 参考文章:https://www.cnblogs.com/wupeiqi/articles/5713323.html 1.函数 1.1内置函数 官方文档:https://de ...

  9. 实用TCP协议(2):TCP 参数优化

    在了解 TCP 的基本机制后本文继续介绍 Linux 内核提供的链接队列.TW_REUSE.SO_REUSEPORT.SYN_COOKIES 等机制以优化生产环境中遇到的性能问题. 连接队列 Linu ...

  10. 微服务入门三:SpringCloud Alibaba

    一.什么是SpringCloud Alibaba 1.简介 1)简介 阿里云未分布式应用开发提供了一站式解决方案.它包含了开发分布式应用程序所需的所有组件,使您可以轻松地使用springcloud开发 ...