ArrayList
含义
变成数组
常用方法
get
add
allAll
remove
set
isEmpty
size
contains
indexOf
lastIndexOf
clear
iterator
案列
public class ArrayListDemo {
public static void main(String[] args) {
//List
//Vector
//Stack
//ArrayList
//LinkedList
//ctrl + shift + o 导入需要的,删除不需要的
List list = new ArrayList();
list.add("zs");
list.add("ls");
list.add("ww");
//根据下标删除元素
list.remove(0);
//根据元素删除元素
list.remove("ww");
//[ls]
System.out.println(list.size());
//根据下标获取
System.out.println(list.get(0));
//TODO 为什么会报错,那如何处理
//System.out.println(list.get(1));
//list.add("xiaoming");
//System.out.println(list); //[ls,xiaoming]
//插入
list.add(0, "xiaoming");
System.out.println(list); //[xiaoming,ls]
list.set(0, "xm");
System.out.println(list); //[xm,ls]
//判断是否为空
System.out.println(list.isEmpty()); //false
System.out.println(list.contains("xm")); //true
list.add("xm"); //[xm,ls,xm]
System.out.println(list);
System.out.println(list.indexOf("xm"));
System.out.println(list.lastIndexOf("xm"));
list.clear();
System.out.println(list);
//方法
//get
//add
//remove
//set
//isEmpty
//size
//contains
//indexOf
//lastIndexOf
//clear
List data = new ArrayList();
data.add("11");
data.add("22");
data.add("33");
//遍历方式一
for(int i=0;i<data.size();i++){
System.out.println(data.get(i));
}
System.out.println("迭代器遍历");
//遍历方式二
Iterator iterator = data.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
//遍历方式三
System.out.println("forEach遍历");
for(Object temp:data){
System.out.println(temp);
}
//另外一个方法
List listData1 = new ArrayList(); //[11]
listData1.add("11");
List listData2 = new ArrayList(); //[22,33]
listData2.add("22");
listData2.add("33");
//listData1.add(listData2);
//System.out.println(listData1); //[11,[22,33]]
listData1.addAll(listData2);
System.out.println(listData1); //[11,22,33]
}
}
Vecotor
含义
底层采用数组存储,api几乎和ArrayList的一样,但是Vector是线程安全的
案例
TODO
Stack
含义
先进先出的数据结构
案例
public class StackDemo {
public static void main(String[] args) {
Stack stack = new Stack();
stack.push("one");
stack.push("two");
//pop 弹出栈顶元素且删除
/*
Object result = stack.pop();
System.out.println(result);
result = stack.pop();
System.out.println(result);
*/
Object result = stack.peek();
System.out.println(result);
result = stack.peek();
System.out.println(result);
}
}
LinkedList
含义
链表数据结构
案例
public class LinkedListDemo {
public static void main(String[] args) {
List list = new LinkedList();
//分类
//单向链表
//Node有什么属性
//class Node{
//Object data;
//Node next;
//}
//双向向链表
//Node有什么属性
//class Node{
//Object data;
//Node pre;
//Node next;
//}
//比较 ArrayList LinkedList
//插入
//LinkedList高
//ArrayList低
//删除
//LinkedList高
//ArrayList低
//修改
//跟查找差不多,因为需要查找到才能修改
//查找
//根据位置查找
//LinkedList低
//ArrayList高
//元素内容
compareInsert();
}
//比较ArrayList和LinkedList插入的效率
public static void compareInsert(){
List arrayList = new ArrayList();
//System.currentTimeMillis();
long start = System.currentTimeMillis();
for(int i=0;i<100000;i++){
arrayList.add(0,i);
}
long end = System.currentTimeMillis();
System.out.println(end-start);
List linkedList = new LinkedList();
//System.currentTimeMillis();
start = System.currentTimeMillis();
for(int i=0;i<100000;i++){
linkedList.add(0, i);
}
end = System.currentTimeMillis();
System.out.println(end-start);
}
}
HashMap
含义
键值对形式,底层采用数据+链表存储结构
示例
TODO
Entry,EntrySet
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2opSzsKw-1658907026415)(assets/1625885883805.png)]
案列一
public class HashMapDemo {
//Map
//HashMap
//TreeMap
//HashTable
//Properties
//HashMap
//含义:本质采用的是数组+链表
//key-value
public static void main(String[] args) {
Map data = new HashMap();
//常用方法
//put
//get
data.put("name", "zhangsan");
data.put("address", "guangdong");
System.out.println(data.get("name")); //zhangsan
System.out.println(data.isEmpty()); //false
System.out.println(data.containsKey("name")); //true
System.out.println(data.containsValue("zhangsan")); //true
System.out.println(data.size()); //2
//data.clear();
//data.remove("name");
data.replace("address", "guangxi");
System.out.println(data); //
//如何遍历
System.out.println("方式一");
//先获取所有的key
Set keyies = data.keySet(); //获取map中的所有key
for(Object key : keyies){
System.out.println(key+"="+data.get(key));
}
System.out.println("方式二");
//方式二
Set<Entry> entries = data.entrySet();
for(Entry entry : entries){
//entry包含key和value
System.out.println(entry.getKey()+"="+entry.getValue());
}
//方式三
System.out.println("方式三");
Collection values = data.values();
for(Object value : values){
System.out.println(value);
}
//TODO 验证
//
}
}
案例二
public class HashMapOtherDemo {
public static void main(String[] args) {
Map map = new HashMap();
User oneUser = new User("zs");
User twoUser = new User("zs");
System.out.println(oneUser);
System.out.println(twoUser);
System.out.println(oneUser.equals(twoUser));
//System.out.println(oneUser == twoUser);
map.put(oneUser, "zhangsan");
map.put(twoUser, "xxxxx");
//hascode 一样
System.out.println(map.size());
}
}
class User{
private String name;
public User(String name){
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
TreeMap
含义
底层采用红黑树实现的一种平衡二叉树
平衡二叉树是排序树的一种优化
注意点
使用TreeMap的时候一定要提供一种比较机制,只有提供了比较机制才能判断当前节点应该作为左孩子还是右孩子。
可以使用如下方式之一
- 第一种:可以构造TreeMap的时候提供比较机器
- 第二种:元素实现Comparable接口
案例
public class TreeMapDemo {
public static void main(String[] args) {
//红黑树是平衡二叉树的一种实现
//含义:是排序树的一种优化
//注意点:一定要提供一种比较机制
//节点实现比较器接口 ok
//提供比较器
System.out.println("元素实现comparable接口方式");
TreeMap treeMap = new TreeMap();
Student zs = new Student("zs");
Student ls = new Student("zs");
treeMap.put(zs, "zs");
treeMap.put(ls, "ls");
System.out.println(treeMap);
System.out.println("提供比较器方式");
//匿名内部类
TreeMap dataMap = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Teacher t1 = (Teacher) o1;
Teacher t2 = (Teacher) o2;
return t1.getName().compareTo(t2.getName());
}
});
Teacher lw = new Teacher("laowang");
Teacher ll = new Teacher("laoliu");
dataMap.put(lw, "老王");
dataMap.put(ll, "老刘");
System.out.println(dataMap);
}
}
class Teacher {
private String name;
public Teacher(String name){
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Teacher [name=" + name + "]";
}
}
class Student implements Comparable{
private String name;
public Student(String name){
this.name = name;
}
@Override
public String toString() {
return "Student [name=" + name + "]";
}
//写比较的规则
//如果是一样则返回0
//-1 0 1
@Override
public int compareTo(Object o) {
Student temp = (Student) o;
return temp.name.compareTo(this.name);
}
}
HashSet
含义
底层采用HashMap来存储,底层将value使用固定值来填充
案例
public class HashSetDemo {
public static void main(String[] args) {
//collection
//set
//HashSet
//本质采用的是HashMap存储,只不过value是固定值
HashSet hashSet = new HashSet();
hashSet.add("one");
hashSet.add("two");
System.out.println(hashSet);
//遍历
for(Object temp:hashSet){
System.out.println(temp);
}
//迭代器 TODO
hashSet.iterator();
}
}
TreeSet
含义
底层采用TreeMap来存储
案例
public class TreeSetDemo {
public static void main(String[] args) {
//底层采用TreeMap
//红黑树
//要求提供比较规则
//构造器中提供比较器
//元素实现Comparable接口
TreeSet treeSet = new TreeSet();
}
}
File
含义
一个File对象可以表示一个文件或者一个文件夹;通过file对象的api可以操作磁盘中的文件或文件夹
案例
public class FileDemo {
//File
//含义:一个File对象可以表示一个文件或者一个文件夹;通过file对象的api可以操作磁盘中的文件或文件夹
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop\\新建文本文档 (2).txt");
System.out.println(file.getName());
file.canRead();
file.canWrite();
file.canExecute();
boolean sign = file.delete();
System.out.println(sign);
//创建文件夹
file = new File("c:\\aa\\cc\\dd");
//如果不存在则创建
if(!file.exists()){
//file.mkdir(); //创建文件夹
file.mkdirs(); //创建多个文件夹
}
//判断是文件还是文件夹
System.out.println(file.isFile()); //判断是否文件
System.out.println(file.isDirectory()); //判断是文件夹
//需求
String path = "D:\\work";
System.out.println("-------------");
displayFile(path);
}
public static void displayFile(String path){
File file = new File(path);
//罗列当前file对象直接下的文件或文件夹
File children [] = file.listFiles();
for(File temp : children){
if(temp.isDirectory()){
//文件夹,再进去
displayFile(temp.getAbsolutePath());
}else{
//文件
System.out.println(temp.getName());
}
}
}
}
IO
含义
输入输出
分类
根据传输的单位
- 字节流
- 字符流
根据流向
- 输入流
- 输出流
字节流
含义
都是从InputStream或OutputStream派生的类
FileInputStream
public class FileInputStreamDemo {
// FileInputStream
//含义:从文件中按照一个一个字节方式读取数据到内存
public static void main(String[] args) throws Exception {
InputStream inputStream = new FileInputStream("C:\\a.txt");
//读一个字节,如果返回-1代表全部读到最末尾了
//int result = inputStream.read();
//System.out.println(result);
//读取全部内容
/*
int content=-1;
while((content=inputStream.read())!=-1){
System.out.println(content);
}
*/
byte [] cache = new byte[1024];
int length=-1;
//把读取到的字节放入cache这个缓存中,返回的是读取到了多个字节,如果-1代表读取到了末尾
while((length = inputStream.read(cache))!=-1){
String strData = new String(cache, 0, length);
System.out.println(strData);
}
//new String(byte [] data,int offset,int length)
//代表将字节数组构造成字符串,offset代表从数组什么位置开始,length取多少个字节
}
}