HeadFirstJava——14_数据结构
List——知道索引的集合
Set——没有重复元素的集合
Map——成对的键、值得集合
ArrayList
1 概念
ArrayList是可动态增长或缩减的索引序列,相当于动态数组;
是用数组结构实现;
随机访问效率高;
不适合经常作插入或删除操作;
对容量不确定的效率较低,可能经常需要对元素进行复制;
2 使用
2.1 定义ArrayIist对象
ArrayList<String> list1 = new ArrayList<String>();
2.2 添加数据
a 在ArrayList末尾添加数据
list1.add("y");
list1.add("q");
list1.add("a"); // 输出list1是[y, q, a]
b 在下标为N处添加数据
list1.add(1, "t"); // 输出list1是[y, t, q, a]
c 将一个ArrayList中所有数据添加到另一个ArrayList中
ArrayList<String> list2 = new ArrayList<String>();
list2.add("w");
list2.add("c");
list1.addAll(list2); // 输出list1是[y, t, q, a, w, c]
d 将一个ArrayList中所有数据添加到另一个ArrayList中的下标为N处
list1.addAll(2, list2); // 输出list1是[y, t, w, c, q, a, w, c]
2.3 删除数据
a 删除下标为N处的数据
list1.remove(3); // 输出list1是[y, t, w, q, a, w, c]
b 按照指定内容删除第一个匹配的数据
list1.remove("w"); // 输出list1是[y, t, q, a, w, c]
c 按照指定集合删除缩合匹配的数据
前提是list1=[s, y, q, a, t, y, q, a],lsit2=[y, q, a]
list1.removeAll(list2); // 输出list1是[s, t]
d 清空ArrayList
list1.clear(); // 输出list1是[]
2.4 修改数据
a 修改下标为N处的数据
list1.set(1, "y"); // 前提list1=[s, t],执行后list1=[s, q]
2.5 查询数据
a 获取下标为N的数据
String first = list1.get(1); //前提是list1=[s, q],执行后first="q"
2.6 迭代器遍历
ArrayList<String> list = new ArrayList<String>();
list.add("y");
list.add("q");
list.add("a");
list.add("t");
list.add("w");
list.add("c");
// iterator()方法返回Iterator
Iterator<String> it = list.iterator();
// hasNext()方法检查ArrayList中是否有下一个元素
while (it.hasNext()){// next()方法返回类型为Object,需强制类型转换成String// 第一次调用next()方法返回ArrayList的下标为0的对象String str = (String) it.next();System.out.print(str);
}
2.7 排序
ArrayList没有sort()方法,因此需要借助Collections.sort()方法对ArrayList的中String按照字母进行排序;
LinkedList<String> list = new LinkedList<String>();
list.add("y");
list.add("q");
list.add("a");
list.add("t");
list.add("w");
list.add("c");
// 排序前list=[y,q,a,t,w,c],排序后list=[a,c,q,t,w,y]
Collections.sort(list);
而对于自己定义的类进行排序,无法简单使用上述方法进行排序,否则编译器报错;
方法1——使用Comparable
首先查看sort()方法的帮助文档,一个如下:
public static <T extends Comparable<? super T>> void sort(List<T> list)
其中,Comparable是接口;对于泛型,extends代表“是一个……”,适用于类和接口;”T extends Comparable“可读作“T必须有实现Comparable的类型”
”Lsit<T>“表示仅能继承Comparable的参数化类型的list;
”<? super T>表示Comparable的类型参数必须是T或T的父型“
因此,对于自己编写的类的ArrayList进行排序,必须实现Comparable;
Comparable接口只有一个方法需要实现,返回值为负整数、零、正整数,分别表示当前对象小于、等于、大于指定对象;
public interface Comparable<T>{
int compareTo(T o);
}
接着确定如何比较才能有办法实现Comparable接口,这里按照歌名字母进行排序;
class Song implements Comparable<Song>{String title;String artist;public int compareTo(Song s){return title.compareTo(s.getTitle());}Song(String t, String a, String r, String b){title = t;artist = a;rating = r;bpm = b;}public String getTitle(){return title;}public String getArtist(){return artist;}
}
方法2——使用Comparator
还有另一个sort()方法,取用Comparator参数;
sort(List<T> list, Comparator<? super T> c)
Comparator接口只有一个方法需要实现;
public interface Comparator<T>{
int compare(T o1, T o2);
}
sort()方法带有Comparator,不会调用元素的compareTo()方法,而是调用Comparator的compare()方法;
class ArtistCompare implements Comparator<Song>{public int compare(Song one, Song two){return one.getArtist().compareTo(two.getArtist());}
}ArrayList<Song> songList = new ArrayList<Song>();
ArtistCompare artistCompare = new ArtistCompare();
Collections.sort(songList, artistCompare);
LinkedList
1 概念
LinkedList在任何位置可高效地插入和删除的有序序列;
是用链表结构实现;
随机访问效率低;
适合作插入或删除操作;
2 操作
因为LinkedList是使用链表结构实现的,因此没有get()和set()方法;
HashSet
1 概念
HashSet是没有重复元素的无序集合;
2 使用
3 对象的等价
3.1 引用相等性
堆上同一对象的两个引用;
使用==判断两个引用是否相等;
3.2 对象相等性
堆上的两个不同对象在意义上是相同的;
使用equals()方法判断两个对象在意义上是否相等;
TreeSet
1 概念
没有重复元素的有序集合;
2 使用
要使用TreeSet,以下其中一项必须为真;
2.1 集合中的元素必须是有实现Comparable的类型
2.2 使用重载、取用Comparator参数的构造函数创建TreeSet
HashMap
1 概念
存储键/值关联的数据结构;
2 使用
2.1 常用方法
HashMap<String, double> map = new HashMap<String, double>();
map.put("math", 100);
map.put("english", 97);
System.out.println(map.containsKey("chinese"));
System.out.println(map.containsValue(100));
double scoreMath = map.get("math");
System.out.println(map.size());
map.remove("math");
2.2 遍历
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("twc", 25);
map.put("yq", 28);
Iterator it = map.entrySet().iterator();
while(it.hasNext()){Map.Entry<String, Integer> entry = (Map.Entry) it.next();System.out.print(entry.getKey() + " ");System.out.println(entry.getValue());
}
HeadFirstJava——14_数据结构相关推荐
- Java14-day05【集合(Collection常用方法-遍历、List特有方法、List集合子类特点、LinkedList集合的特有功能、ListIterator)】
视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java ...
- 面试+学习+做项目+最全Java视频讲解
关注公众号:计算机视觉与图形学实战 Java零基础教程视频(适合Java 0基础,Java初学入门) 尚硅谷Java零基础入门教程(含百道Java真题,2万多行Java代码实战) 黑马程序员全套Jav ...
- 数据结构学习笔记-郝斌
课时 1.P1_什么叫做数据结构 全教程大纲: 1.数据结构的概述 推荐用书: 严蔚敏(考研选择)<数据结构> 吴伟民的<数据结构> 高一凡<数据结构>(有具体程序 ...
- 数据结构(08)— 线性单链表基本操作
1. 线性单链表数据结构 // 假定每个结点的类型用 SNode 表示 typedef struct SNodeTag {int data; // 所存储的数据元素SNodeTag *next; // ...
- 数据结构(06)— 线性循环链表实战
1. 循环链表定义 单链的循环链表结点的存储结构和单链表的存储结构一样, 所不同的是: 最后一个结点的 next 域指向头结点, 而不是"空".这样, 由表尾很容易找到表头. 但若 ...
- 数据结构(05)— 线性单链表实战
1. 设计思路 本项目的实质是完成对考生信息的建立.查找.插入.修改.删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结 ...
- 数据结构(04)— 线性顺序表实战
1. 设计思路 本实战的实质是完成对学生成绩信息的建立.查找.插入.修改.删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运 ...
- 数据结构(03)— 数据处理基本操作(数据的查找、新增、删除、修改)
我们先来看一个关于查找的例子.查找,就是从复杂的数据结构中,找到满足某个条件的元素.通常可从以下两个方面来对数据进行查找操作: 根据元素的位置或索引来查找: 根据元素的数值特征来查找. 针对上述两种 ...
- 数据结构(02)— 时间复杂度与空间复杂度转换
1. 时间复杂度转化为空间复杂度 常用的降低时间复杂度的方法有递归.二分法.排序算法.动态规划等,降低空间复杂度的核心思路就是,能用低复杂度的数据结构能解决问题,就千万不要用高复杂度的数据结构. ...
- OpenCV 笔记(09)— 常用的数据结构和函数(Vec、Point、Scalar、Size、Rect、cvtColor)
1. Vec 对象类型 Vec 是一个主要用于数值向量的模板类.我们可以定义向量的类型和组件的数量: Vec<double, 19> myVector 我们还可以使用任何的预定义类型: t ...
最新文章
- java map一对多映射_java – Mapstruct:将多个源对象映射到子对象
- PAT甲级1088 Rational Arithmetic:[C++题解]分数的加减乘除
- Java EE与NoSQL的未来
- 征服用计算机弹法,征服WIN7
- 计算机怎么会自动开机,Windows10系统电脑半夜会自动开机如何解决
- Windows学习总结(15)——Notepad++ 快捷键大全
- 【一分钟论文】IJCAI2019 | Self-attentive Biaffine Dependency Parsing
- arcpy 使用ListFields函数获取字段列表的名称、类型和长度
- android 修复工具,安卓手机修复工具下载 牛学长安卓手机修复工具(安卓手机修复助手) v2.4.0.15 官方免费安装版 下载-脚本之家...
- dell R740secure boot_凯诺 10月11日 DELL 电脑报价
- 前端上传组件Plupload使用指南
- 网站一键分享到新浪微博QQ空间腾讯微博
- 如何修复硬盘的分区表
- 只能吃土豆的牛牛(二进制枚举)
- 怎样提高自己的分析能力
- mongodb php auth,mongodb 3.0改变了authMechanism
- PDF怎么删除空白页,PDF删除空白页的方法
- vertica基本操作
- Tomcat安装及环境配置教程
- Pygame实战之外星人入侵NO.11——设置开始按钮
热门文章
- 光纤基础知识;接口类型、光模块、光纤种类、
- 计算机丢失d3d10,“怎样解决d3dx10_42.dll丢失造成的游戏打不开”的解决方案
- keil+c语言优化,KEIL编译器【C语言编译选项优化等级说明】
- SQL面试题:删除表中指定字段的重复数据,只保留最大的id数据
- matlab使用笔记(一)——matlab语言中if、for语句与C语言中的差别
- fanuc机器人码垛编程实例_FANUC 机器人码垛编程详细讲解,要收藏哦~
- MATLAB深度学习工具箱文档——trainingOptions函数的参数设置
- 推荐自用黑苹果Clover引导主题
- 官网下载mysql连接驱动jar包教程
- 二进制编辑和进程监控工具