类集
类集实际上是一个动态的对象数组,一般的对象数组存在一个长度的限制。类集则可以任意扩充
Collection父接口
定义了基本的操作方法,如添加,删除,是否存在某个对象/对象集,是否为空
它的子接口:List、Set、Queue、SortedSet
很少直接使用Collection接口,而是使用子类,这样可以操作意义明确:如要不要重复,要不要排序等操作明确
List接口
特点:内容可以重复,可以根据索引输出(get(i))
多用它的子类ArrayList实例化
示例代码:
List<String> list = new ArrayList<>();
list.add("nihao");
list.add(0,"tahao");
list.add(0,"tahao");不会替换0位元素,之前的元素往后移
1、删除操作:remove(obj):如果obj没有,不会报错。如果obj错在多个,只会删除第一个
2、转为数组对象: Object[] obj = list.toArray()
3、截取部分集合:List<E> subList(int fromIndex, int toIndex)
4、查找对象是否存在:indexOf(obj)或者contains(obj),contains效率相当高点,不返回位置索引,但是本质也是调用indexOf方法
ArrayList子类:
1、底层采用数组实现,
2、实现了Cloneable接口,即覆盖了函数clone(),能被克隆
3、java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输
LinkedList子类:一个链表的操作类(使用较少)
Set接口
特点: 内容不能重复,依靠hashCode()和equals()完成重复元素的判断
HashSet子类:内容是无序的
Set<String> setS = new HashSet<String>();
TreeSet子类:内容是有序的,是可以自动排序的。
Set<String> setS = new TreeSet<String>();
TreeSet的排序原理:依靠Comparable接口完成排序,比如String本身继承Comparable接口,覆写compareTo方法
注意自定义类的中属性每个都要在compareTo中排序,String也需要
去除重复元素原理: hashCode():表示一个唯一的编码,一般通过计算表示 equals():进行对象的比较操作
示例代码:Person类
class Person implements Comparable<Person>{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "姓名:"+name+"\t"+"年龄:"+age;
}
@Override
public boolean equals(Object obj) {
if (this == obj){
return true;
}
if (!(obj instanceof Person)){
return false;
}
Person p = (Person)obj;
if (this.age == p.age && this.name.equals(p.name)){
return true;
}
return false;
}
@Override
public int hashCode() {
return this.name.hashCode()*this.age;
}
@Override
public int compareTo(Person person) {
if (this.age == person.age){
return this.name.compareTo(person.name);
}
return 1;
}
}
SortedSet接口
TreeSet是SortedSet的子类
Iterator接口
重点:在使用集合输出的时候必须形成以下的一个思路:只要是碰到了集合输出的操作,就一定使用Iterator接口,因为这是标准的做法
示例代码:
public class IteratorDemo {
public static void main(String[] args){
List<String> list = new ArrayList<>();
list.add("小明");
list.add("小黑");
list.add("小红");
Iterator iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
ListIterator接口
是List接口的子类,可以实现双向输出,由后往前输出
Map接口
Map.Entry是Map内部的接口,即Map存的还是一个个对象,该对象就是Map.Entry,然而Map.Entry存放key和value
Map的子类:
HashMap:无序存放的,是新的操作类,Key不允许重复
HashTable:无序存放的,是旧的操作类,key不允许重复
TreeMap:可以排序的Map集合,按集合中的key排序,key不允许重复
IdentityHashMap:key可以重复的Map集合
WeakHashMap:弱引用,希望集合可以自动清理暂时不用的数据。如调用System.gc()
HashMap与Hashtable的区别:HashMap是新的操作类,采用异步处理方式,性能更高。Hashtable是旧的操作类,采用同步处理,性能较低
IdentityHashMap的key是比较地址的,只要地址不同都可以添加进去
Map<String,String> map = new IdentityHashMap<>();
map.put("A","111");
map.put("A","222");
map.put("C","333");
因为A地址相同,没有new,第二个A会替换第一个
相关操作:
- containsXXX判断是否存在key或者value
- Set《T》 keySet = map.keySet():等到全部key
-
Collection<String> values = map.values()
等到全部value
TreeMap可以方便完成排序操作,如果是自定义类作为key,一定要实现Comparable接口,重写compareTo方法实现比较规则
SortedMap接口
子类TreeMap实例化
Collections:集合工具类
Collections与Collection联想:Collections和Collection接口没有任何关系,是继承Object类,但是与集合中的各个接口都有操作方法的支持
Properties:属性类
是Hashtable的子类,也是Map的子类,但一般单独使用
public static void main(String[] args){
Properties properties = new Properties();
properties.setProperty("A","111111");
properties.getProperty("A");
}
读取area.properteis文件
File file = new File(xx/area.properties)
pro.load(new FileInputStream(file))
properties.getProperty("A");
重点:改变集合中的某个item,也会影响集合,这也是Adapter中getDatas中的item,修改后,刷新列表,列表会起作用
示例代码:
Set<Person> personSet = new TreeSet<Person>();
Person per1 = new Person("小明",10);
personSet.add(per1);
personSet.add(new Person("小红",20));
personSet.add(new Person("小东",30));
personSet.add(new Person("小黑",20));
per1.setName("小小");
栈:先进后出
对象的引用强度
强引用:当内存不足时,JVM宁可出现OutOfMemeryError错误而试程序停止,也不会回收此对象来释放空间
软引用:当内存不足时,会回收这些对象的内存,用来实现内存敏感的高速缓存
弱引用:无论内存是否紧张,被垃圾回收器发现立即回收
网友评论