您的位置:首页 > 职场人生

面试准备(二十)--类集

2020-03-19 20:28 381 查看

http://www.jianshu.com/p/ca7757888197


类集

类集实际上是一个动态的对象数组,一般的对象数组存在一个长度的限制。类集则可以任意扩充

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会替换第一个

相关操作:

  1. containsXXX判断是否存在key或者value
  2. Set《T》 keySet = map.keySet():等到全部key
  3. 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错误而试程序停止,也不会回收此对象来释放空间
软引用:当内存不足时,会回收这些对象的内存,用来实现内存敏感的高速缓存
弱引用:无论内存是否紧张,被垃圾回收器发现立即回收

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gt