java 集合
Posted 黄军勇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 集合相关的知识,希望对你有一定的参考价值。
方法覆写
// 重写toSting方法
@Override
public String toString() {
// TODO Auto-generated method stub
return "name=" + name + ";age=" + age;
}
// 重写equals方法
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
Person p = null;
if (obj instanceof Person) {
// 需要强转
p = (Person) obj;
if (p.name.equals(this.name)) {
return true;
} else
return false;
} else
return false;
}
String使用
字符串的构造方法
//1.String(byte[] bytes) 通过字节数组来创建
byte[] b = {97,98,99}; //65 : A
//2.String(byte[] bytes, int offset, int length)
bytes - 要解码为字符的 byte
offset - 要解码的第一个 byte 的索引
length - 要解码的 byte 数
String s2 = new String(b,1,2);
Length( ) 获取字符串长度
charAt( ) 获取特定位置的字符
Indexof ( ) 获取特定字符的位置
indexOf(String s , int fromIndex) 需要在原字符串中搜索的字符串 fromIndex :从哪一个位置开始, 包含这个位置的
lastInsexOf ( ) 获取最后一个字符的位置
BOOLean 判断方法
endsWith(String str) 是否以指定字符结束
isEmpty()是否长度为0 如:“” null V1.6
equals(Object anObject) 是否相等
equalsIgnoreCase(String anotherString) 忽略大小写是否相等
字符串的转换
//valueOf(char[] data, int offset, int count) 从指定的位置和长度来转。
//将字符串转为字符数组
toCharArray( )
// 将String转为基本数据类型
String s1 = "10";
Integer i =new Integer(s1);
* 其他方法
* String replace(char oldChar, char newChar) 替换//前面是你需要替换的字符 ,后面是替换成什么
String[] split(String regex) 切割
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)截取字串
String toUpperCase() 转大写
String toLowerCase() 转小写
String trim( ) 去除空格// 用来去除头部和尾部的空格。
//1.查找字符串
String filePath = "D:\\20161126\\day13\\Demo1.java";
//s.indexOf("java"); //第一次出现的索引位置
//s.indexOf("java", 2);//从指定的位置开始查找
StringBuffer: 字符串缓存区 : 存在一个字符数组 默认会有一个大小 :16 ,如果超了就容器大小就翻一倍。
* 类似oc中的可变字符串。
*/
// StringBuffer :存字符的容器
容器的功能 :
增加
append(); //在字符串的后面追加
insert(); //插入一个字符串。
删除
//delete(int start, int end) // 删除某一段字符串。
//deleteCharAt(int index) // 删除指定位置的字符串
修改
replace(int start, int end, String str) 根据指定 的开始与结束索引值替代成指定的内容。
reverse() 翻转字符串缓冲类的内容。 abc--->cba
setCharAt(int index, char ch) 把指定索引值的字符替换指定的字符。
substring(int start, int end) 根据指定的索引值截取子串。
ensureCapacity(int minimumCapacity) 指定StringBuffer内部的字符数组长度的。
查找
indexOf(String str, int fromIndex) 查找指定的字符串第一次出现的索引值,并且指定开始查找的位置。
lastIndexOf(String str)
capacity() 查看当前字符数组的长度。
length()
charAt(int index)
toString() 把字符串缓冲类的内容转成字符串返回。
random()产生随机数 // 产生的是 大于等于 0.0 - 小于1.0之间的随机数
*/
*
* System 的使用 :
* System 是系统类 主要用来获取系统的数据 它不能被实例化
* //对象呗回收会调用到这个方法中 多线程中执行的 Java中最少几个线程 : 两个 : 主线程 ,垃圾回收线程
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
System.out.println(this.name+"挂了。。");
//3.终止当前运行的jvm
//System.exit(0); //输入一个0或者非0的数都可以 里面 :runtime.exit(0);
//4.gc( ); 运行垃圾回收器
*/
集合
集合:用来存放对象的容器,对象类型是任意的,长度是可变的。
集合比数组的优势:集合可以存任意类型的对象,长度是可变的。
数组:只能存同一种类型的变量,长度是固定的。
两种接口 1 List 接口 可以有重复的元素,有序
2Set 接口 反之 无序
关键功能 增 删 改 查
创建集合对象 Collection c = new ArrayList<>();
增 add( ) 将指定对象存储到集合中
addAll () 将指定集合中的元素 添加到该集合
addLast () 最后面
addFirst () 最前面
删 remove()将指定对象从集合中删除
removeAll () 将指定集合 从该集合中删除
判断 isEmpty() 判断集合是否为空
containsAll 判断集合中是否包含指定集合
Contains 判断集合中是否包含指定对象
获取: size() 返回集合容器的大小
转成数组 toArray() 集合转换数组
A.retainAll(B ) 求集合A和集合B中的交集
List 只是个接口提供公有的方法中特有的方法:通过下标来操作元素,因为有序
增 add(int index, E element ) 将指定对象存储到集合中
addAll () 将指定集合中的元素 添加到该集合
获取对象
get(int index) 获取集合中指定位置的元素 用来修改集合中指定位置的值
.查找:
indexOf(Object o) 查找指定对象在集合中第一次出现的位置。
lastIndexOf(Object o) 返回查找集合中元素最后一次出现的位置
//删除指定索引位置的对象
list.remove( );
/*
* 迭代器 :
* 用来操作集合中的元素,增删 , 获取集合中的对象。
* 集合中获取迭代器:通过集合中方法来获取 iterator()
* Iterator : 迭代器的超级接口 : 所有的迭代器接口都是继承Iterator
*
* 迭代器中常用的方法:
* hasNext(); //判断当前指针指向的位置是否存在元素
* next(); // 获取当前指针指向元素的。 当这个方法被调用一次后指针就会下一次。
* remove(); // 删除最后一次出现对象 移除最后一次操作的元素
/*
* listItreaor : 继承 Iteraor
listItreaor : 特有的方法:
hasPrevious() ; // 判断当前是否指针指向的上一个元素
previous() ; // 获取上一个元素
previousIndex() //获取上一个元素索引位置
//////////////////////////
add(E e) ;
不能同时使用
set(E e) ;
*
//三种方式遍历集合:
//f方式一 : 将集合变为数组
//方式二: get()方法获取 : 只能在list集合中使用, 只有list集合才有索引值。
//通过迭代器 ListIterator类 next()
迭代器使用的注意事项: 当你用迭代器来操作集合中的元素时,不要再用集合来操作元素
例如 通过索引值 插入对象 这时候不要用 迭代器如上特有方法来操作 会造成指针异
常
//
ArrayList 底层是维护一个Object的数组,默认容量是10,如果用量不够增加1.5倍
方法:trimToSize( ) 调整用量和数据保持一致
ensureCapcity () 自定用量
结构:collection 接口 跟接口 Collection 超接口
* ------> List
* ---->ArrayList : 是存在一个数组(Object[]), 添加,删元素很慢,查找很块 ,元素在内存中是有序的。
* ---->LinkedList : 添加元素比较快 , 删,查找比较慢 ,元素在内存中是无序的
Set集合
也是一个接口 : 继承Collection接口 特点 :无序的元素不能重复
首先回调用对象的hashCode方法获取hashCode值,通过移位等运算获取一个位置
情况1:如果位置上是没有元素,直接将元素存放在该位置。
* 情况2: 如果位置上已经有了元素,用对象的equals方法和位置上已经存在的对象作比较,如果equals返回的是true那就代表是重复对象,
* 就不存,如果返回的false将对象和原有的对象存在一起。
1.将集合变为数组 ,2.通过迭代器来遍历
//将集合变为字符串。
//将集合变为字符串。
s = Arrays.toString(set.toArray());
首先集合转不了字符串 先将集合转为数组 然后通过数组一个方法转为字符串
import java.util.HashSet; 为set集合的包
import java.util.TreeSet; 为set底层使用二叉树来实现的包
TreeSet使用注意点:
* 1.往TreeSet添加对象的时候,如果对象有这个自然排序的特性,就按照这个自然排序进行排序。
* 2.往TreeSet添加对象的时候,如果对象本身不具备自然排序的特性,运行的时候直接报错,如果需要存储对象,那么的对象的类必须要实现
* Comparable 接口 把元素的比较的规则定义在compareTo方法中。
*
* 3..往TreeSet添加对象的时候,如果对象本身不具备自然排序的特性,并且没有实现Comparable 接口,那么这个时候就需要创建
* 一个TreeSet的时候传入一个比较器。
使用注意:
1.如果添加的元素存在自然排序的特性,那么存入的元素会通过自然排序进行排序
2.如果添加的元素,不具备自然排序的特性,那么这个时候必须要实现Comparable接口
将元素的比较规则定义到comparTo方法中
comparTo的比较规则: 返回一个0,负数或正数 ,分别表示相等,小于和大于
3.如果添加的元素,不具备自然排序的特性,又没有实现Comparable接口 ,这个时候需要写在创建TreeSet对象是传一个比较器。
*
* 比较器的定义方式:
* 自定义一个类实现:Comprator接口
*
* 同实现Comprator中compar(Object o1 ,Objecto1)来指定元素比较的规则。
* 规则:返回一个0,负数或正数 ,分别表示相等,小于和大于。
*
* TreeSet:底层是使用二叉树来存放数据的。
小就翻一倍。
* 类似oc中的可变字符串。
*/
// StringBuffer :存字符的容器
容器的功能 :
增加
append(); //在字符串的后面追加
insert(); //插入一个字符串。
删除
//delete(int start, int end) // 删除某一段字符串。
//deleteCharAt(int index) // 删除指定位置的字符串
修改
replace(int start, int end, String str) 根据指定 的开始与结束索引值替代成指定的内容。
reverse() 翻转字符串缓冲类的内容。 abc--->cba
setCharAt(int index, char ch) 把指定索引值的字符替换指定的字符。
substring(int start, int end) 根据指定的索引值截取子串。
ensureCapacity(int minimumCapacity) 指定StringBuffer内部的字符数组长度的。
查找
indexOf(String str, int fromIndex) 查找指定的字符串第一次出现的索引值,并且指定开始查找的位置。
lastIndexOf(String str)
capacity() 查看当前字符数组的长度。
length()
charAt(int index)
toString() 把字符串缓冲类的内容转成字符串返回。
random()产生随机数 // 产生的是 大于等于 0.0 - 小于1.0之间的随机数
*/
*
* System 的使用 :
* System 是系统类 主要用来获取系统的数据 它不能被实例化
* //对象呗回收会调用到这个方法中 多线程中执行的 Java中最少几个线程 : 两个 : 主线程 ,垃圾回收线程
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
System.out.println(this.name+"挂了。。");
//3.终止当前运行的jvm
//System.exit(0); //输入一个0或者非0的数都可以 里面 :runtime.exit(0);
//4.gc( ); 运行垃圾回收器
*/
集合
集合:用来存放对象的容器,对象类型是任意的,长度是可变的。
集合比数组的优势:集合可以存任意类型的对象,长度是可变的。
数组:只能存同一种类型的变量,长度是固定的。
两种接口 1 List 接口 可以有重复的元素,有序
2Set 接口 反之 无序
关键功能 增 删 改 查
创建集合对象 Collection c = new ArrayList<>();
增 add( ) 将指定对象存储到集合中
addAll () 将指定集合中的元素 添加到该集合
addLast () 最后面
addFirst () 最前面
删 remove()将指定对象从集合中删除
removeAll () 将指定集合 从该集合中删除
判断 isEmpty() 判断集合是否为空
containsAll 判断集合中是否包含指定集合
Contains 判断集合中是否包含指定对象
获取: size() 返回集合容器的大小
转成数组 toArray() 集合转换数组
A.retainAll(B ) 求集合A和集合B中的交集
List 只是个接口提供公有的方法中特有的方法:通过下标来操作元素,因为有序
增 add(int index, E element ) 将指定对象存储到集合中
addAll () 将指定集合中的元素 添加到该集合
获取对象
get(int index) 获取集合中指定位置的元素 用来修改集合中指定位置的值
.查找:
indexOf(Object o) 查找指定对象在集合中第一次出现的位置。
lastIndexOf(Object o) 返回查找集合中元素最后一次出现的位置
//删除指定索引位置的对象
list.remove( );
/*
* 迭代器 :
* 用来操作集合中的元素,增删 , 获取集合中的对象。
* 集合中获取迭代器:通过集合中方法来获取 iterator()
* Iterator : 迭代器的超级接口 : 所有的迭代器接口都是继承Iterator
*
* 迭代器中常用的方法:
* hasNext(); //判断当前指针指向的位置是否存在元素
* next(); // 获取当前指针指向元素的。 当这个方法被调用一次后指针就会下一次。
* remove(); // 删除最后一次出现对象 移除最后一次操作的元素
/*
* listItreaor : 继承 Iteraor
listItreaor : 特有的方法:
hasPrevious() ; // 判断当前是否指针指向的上一个元素
previous() ; // 获取上一个元素
previousIndex() //获取上一个元素索引位置
//////////////////////////
add(E e) ;
不能同时使用
set(E e) ;
*
//三种方式遍历集合:
//f方式一 : 将集合变为数组
//方式二: get()方法获取 : 只能在list集合中使用, 只有list集合才有索引值。
//通过迭代器 ListIterator类 next()
迭代器使用的注意事项: 当你用迭代器来操作集合中的元素时,不要再用集合来操作元素
例如 通过索引值 插入对象 这时候不要用 迭代器如上特有方法来操作 会造成指针异
常
//
ArrayList 底层是维护一个Object的数组,默认容量是10,如果用量不够增加1.5倍
方法:trimToSize( ) 调整用量和数据保持一致
ensureCapcity () 自定用量
结构:collection 接口 跟接口 Collection 超接口
* ------> List
* ---->ArrayList : 是存在一个数组(Object[]), 添加,删元素很慢,查找很块 ,元素在内存中是有序的。
* ---->LinkedList : 添加元素比较快 , 删,查找比较慢 ,元素在内存中是无序的
Set集合
也是一个接口 : 继承Collection接口 特点 :无序的元素不能重复
首先回调用对象的hashCode方法获取hashCode值,通过移位等运算获取一个位置
情况1:如果位置上是没有元素,直接将元素存放在该位置。
* 情况2: 如果位置上已经有了元素,用对象的equals方法和位置上已经存在的对象作比较,如果equals返回的是true那就代表是重复对象,
* 就不存,如果返回的false将对象和原有的对象存在一起。
1.将集合变为数组 ,2.通过迭代器来遍历
//将集合变为字符串。
//将集合变为字符串。
s = Arrays.toString(set.toArray());
首先集合转不了字符串 先将集合转为数组 然后通过数组一个方法转为字符串
import java.util.HashSet; 为set集合的包
import java.util.TreeSet; 为set底层使用二叉树来实现的包
TreeSet使用注意点:
* 1.往TreeSet添加对象的时候,如果对象有这个自然排序的特性,就按照这个自然排序进行排序。
* 2.往TreeSet添加对象的时候,如果对象本身不具备自然排序的特性,运行的时候直接报错,如果需要存储对象,那么的对象的类必须要实现
* Comparable 接口 把元素的比较的规则定义在compareTo方法中。
*
* 3..往TreeSet添加对象的时候,如果对象本身不具备自然排序的特性,并且没有实现Comparable 接口,那么这个时候就需要创建
* 一个TreeSet的时候传入一个比较器。
使用注意:
1.如果添加的元素存在自然排序的特性,那么存入的元素会通过自然排序进行排序
2.如果添加的元素,不具备自然排序的特性,那么这个时候必须要实现Comparable接口
将元素的比较规则定义到comparTo方法中
comparTo的比较规则: 返回一个0,负数或正数 ,分别表示相等,小于和大于
3.如果添加的元素,不具备自然排序的特性,又没有实现Comparable接口 ,这个时候需要写在创建TreeSet对象是传一个比较器。
*
* 比较器的定义方式:
* 自定义一个类实现:Comprator接口
*
* 同实现Comprator中compar(Object o1 ,Objecto1)来指定元素比较的规则。
* 规则:返回一个0,负数或正数 ,分别表示相等,小于和大于。
*
* TreeSet:底层是使用二叉树来存放数据的。
以上是关于java 集合的主要内容,如果未能解决你的问题,请参考以下文章