Java集合框架部分细节总结一

Collection

List 有序,有下标,元素可重复

Set 无序,无下标,元素不可重复

以上为Collection接口

以ArrayList为实现类实现遍历:增强for 和迭代器

for (Object object : collection) {
System.out.println(object);
}
Iterator it = collection.iterator();
while(it.hasNext()){
Student st1 = (Student) it.next();
System.out.println(st1.toString());
}

it.next()为object类,故输出时需要进行类型转换

Iterator有三种方法:

hasNext() boolean型,确定是否具有下一个元素进行迭代

next() object型,获取下一个元素

remove() void,删除当前元素

在迭代器迭代的过程中,不能修改collection元素,例如不能用collection.remove();但是可以通过iterator.remove来修改

List

实现类 ArrayList Vector LinkedList

list中存储的对象为包装类,若存int型,则为Integer

subList 返回一个子集合,(int,int)含头不含尾

ListIterator 有set可直接替换当前next或previous

List实现类

ArrayList 数组结构实现,查询快,增删慢,线程不安全(效率快)

Vector 数组结构实现,查询快,增删慢,线程安全(效率慢);有elements的几个接口

LinkedList 链表结构实现,增删快,查询慢

ArrayList 源码中可看出,数组空间初始最低容量为10,超过10之后为x+1/2x(此为1/2向下取整)

Vector 多了一个枚举器,后来的版本中多用迭代器了

Enumeration enumeration = vector.elements();
while(enumeration.hasMoreElements()){
String s = enumeration.nextElement().toString();
System.out.println(s);
//判断 contains
/*
vector.firstElement();
vector.lastElement();
vector.elementAt();
*/
}

建立一个Student类

private String name;
private int age;

建立一个实现类为ArrayList的集合

Student s1 = new Student("xiaomign",11);
Student s2 = new Student("xiaohong",12);
Student s3 = new Student("xiaolan",13);
collection.add(s1);
collection.add(s2);
collection.add(s3);

若直接remove(new Student("xiaolan",13));不会成功,因为equals里判断为

this == object;

故需重写Student类中的equals

@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj == null)
return false;
if(obj instanceof Student){
Student s = (Student)obj;
if(this.name.equals(s.getName()) && this.age == s.getAge())
return true;
}
return false;
}

泛型类

  • 若建立泛型类,
public class Mygeneric<T>{
T t = new T(); //不可以!!!
}

不能直接实例化,需引用类型

  • 通常有4种占位符
Mygeneric <T>  类名<>  T type E element  K key V value
  • 泛型类3种使用方法:创建变量,传参,返回值
public class demo1<T> {
//Mygeneric <T> 类名<> T type E element K key V value
//创建变量
T t;
//传参
public void show(T t){
System.out.println(t);
}
//返回值
public T getT() {
return t;
}
}
  • 建立泛型之后的使用过程举例:
demo1<Integer> mygeneric = new demo1<Integer>();
mygeneric.t = 1;
System.out.println(mygeneric.getT());

注意:

  1. 泛型只能使用引用类型
  2. 不同泛型类型不能相互赋值,同类型可以

泛型接口

可直接利用泛型生成接口,以便重写

public interface genericInterface<T> {
T serve(T t);
}
  • 重写部分(确定引用类型)如下:
public class interfaceImp implements genericInterface<String>{
@Override
public String serve(String s) {
System.out.println(s);
return null;
}
}

重写过程不是必须引用类型,以下举例

  • 重写部分(不确定类型)如下:
public class interfaceImp2<T> implements genericInterface<T>{
@Override
public T serve(T t) {
System.out.println(t);
return null;
}
}

在实例化过程中需要引用类型

interfaceImp2<String> s2 = new interfaceImp2();
s2.serve("xxx");

泛型方法

Java 不允许把对象放进一个未知类型的集合里,Collection<?> c

修饰符 <> 返回值类型 方法

举例

public <T> void show(T t){
System.out.println("泛型方法"+t);
}

返回值类型也可用泛型,在调用该方法时以传入参数的类型为主

泛型可以实现类似重载的功能,提高代码重用性,防止类型转换异常

public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("xxx");
arrayList.add("yyy");
arrayList.add(12); for(Object object : arrayList){
String str = (String)object;
System.out.println(str);
}
}

增强for部分将出现类型异常

Integer cannot be cast to class java.lang.String

sout(object)不会出现异常是因为pritln之内调用了.Tostring

Collection<T> t = new Collection<>();

可以保证集合t中全为同一种类型

(Collection, List, 泛型)JAVA集合框架一的更多相关文章

  1. 我所理解Java集合框架的部分的使用(Collection和Map)

    所谓集合,就是和数组类似——一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接 ...

  2. 一起学 Java集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  3. Java集合框架之Collection接口

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

  4. Java集合框架Collection

    转自:http://www.cdtarena.com/javapx/201306/8891.html [plain] view plaincopyprint?01.在 Java2中,有一套设计优良的接 ...

  5. Java集合框架(一)—— Collection、Iterator和Foreach的用法

    1.Java集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...

  6. 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射

    从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...

  7. 初识Java集合框架(Iterator、Collection、Map)

    1. Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 注意: 既有接口也有类,图中画实线的是类,画虚线的是接口 使用之前须要到导入java.util包 List ...

  8. Java集合框架(Collection Framework)学习之 Collection与Map概貌

    写过Java的人都知道Java集合类,也用过Java集合类.Java集合类位于 java.util 这个包下,就像它的包名暗示的那样,Java集合类就是一套工具.它就像工匠的工具箱一样,它能给使用它的 ...

  9. Java集合框架介绍。Java Collection Frameworks = JCF

    Java集合框架 = Java Collection Frameworks  = JCF . 为了方便理解,我画了一张思维脑图.

随机推荐

  1. [转]SIFT,SURF,ORB,FAST 特征提取算法比较

    转载地址:https://blog.csdn.net/vonzhoufz/article/details/46461849 主要的特征检测方法有以下几种,在一般的图像处理库中(如opencv, VLF ...

  2. [转]Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL

    转载地址:https://www.cnblogs.com/MYSQLZOUQI/p/4233630.html 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱 ...

  3. [转]ROS 传感器消息及RVIZ可视化Laserscan和PointCloud

    https://blog.csdn.net/yangziluomu/article/details/79576508 https://answers.ros.org/question/60239/ho ...

  4. 一周精彩内容分享(第 3 期):开工大吉的 B 面

    这里记录过去一周,我看到的值得分享的东西. 一方面是整理记录一下自己一周的学习,另一方面也是期待自己有更多的输出,有更多的价值. 周刊开源(Github:wmyskxz/weekly),欢迎提交 is ...

  5. 二分图最小点覆盖构造方案+König定理证明

    前言 博主很笨 ,如有纰漏,欢迎在评论区指出讨论. 二分图的最大匹配使用 \(Dinic\) 算法进行实现,时间复杂度为 \(O(n\sqrt{e})\),其中, \(n\)为二分图中左部点的数量, ...

  6. 第47天学习打卡(HTML)

    什么是HTML HTML Hyper Text Markup Language(超文本标记语言) 超文本包括:文字,图片,音频,视频,动画等 HTML5,提供了一些新的元素和一些有趣的新特性,同时也建 ...

  7. Wireshark使用记录

    TCP/IP协议族里的协议众多 要一一精通比较困难,在一些紧急急需要分析主机.客户端的流量场景时,不懂协议也要上!下面就是用到哪里就记录到哪,有错误欢迎评论指出,多谢. wireshark这玩意相当于 ...

  8. Spring-05 使用注解开发

    Spring-05 使用注解开发 使用注解开发 1.项目准备 在spring4之后,想要使用注解形式,必须得要引入aop的包5 <!-- https://mvnrepository.com/ar ...

  9. 剑指 Offer 10- II. 青蛙跳台阶问题

    剑指 Offer 10- II. 青蛙跳台阶问题 Offer 10- II 题目描述: 动态规划方程: 循环求余: 复杂度分析: package com.walegarrett.offer; impo ...

  10. 蓝桥杯-分考场(dfs)

    分考场 PREV-53 这题的解决方法使用dfs,因为数据很小,才100. 每次当前的人人是否可以和前面的组队,设置两个数组group和fri /*DFS求解:思路每次判断输入的人是否可以和前面的组队 ...