黑马程序员技术交流社区
标题:
集合框架总结
[打印本页]
作者:
jekyll
时间:
2015-9-27 00:37
标题:
集合框架总结
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class T01 {
public static void main(String[] args) {
/*
1. 集合框架
Collection(接口)
List(接口)
ArrayList
LinkedList
Set(接口)
HashSet
Map(接口)
HashMap
2. Collection和Map的区别
Collection:放的就是一个一个的元素
Map:放的是键值对
3. List和Set区别
List:可以重复,并且有序
Set:不可以重复,不做任何处理,就是没有序的
4. ArrayList和LinkedList的区别
ArrayList:模拟了一个数组,他的空间是连续。
他如果做删除,插入的动作的时候,效率比较低。
根据索引访问数据的时候,效率比较高。
遍历数据的时候,效率比较高。
LinkedList:是链表,他的空间不是连续。
内存的空间利用率会比较高。
他如果做删除,插入的动作的时候,效率比较高。
根据索引访问数据的时候,效率比较低。
遍历数据的时候,效率比较低。
5. 如果想让一个类型进行“foreach”迭代,必须实现哪一个接口?
Iterable<E>
6. 为什么使用泛型
不适用泛型的坏处:会频繁的出现类型转换
类型不安全。
因为会出现频繁的类型转换效率会比较低
不利于程序的撰写,写程序容易出错。很多错误只能在运行时发现。
使用了泛型以后:
因为在声明的时候就指明了他的数据类型,
所以,在编译时就可以发现错误。有利于提高开发效率。
因为在声明的时候就指明了他的数据类型,不会出现类型转换,
他是类型安全的。
7. 什么叫做拆箱和装箱
装箱:从基本数据类型到引用类型的隐式转换
拆箱:从引用类型到基本数据类型的显式转换
8. 重写equals和hashCode
equals比较的是地址,如果你想改变比较的逻辑
那么就需要重写equals。
重写equals就一定要重写hashCode。
hashCode:这一般是通过将该对象的内部地址转换成一个整数来实现的
有很多集合HashTable,HashSet等等,这些集合都带了Hash这个词
这个词意味着快,他为什么快,因为他会根据hashCode生成一个索引目录
为了提高效率的,如果你不重写hashCode就会影响HashXXX检索的性能。
9. Object里面常用的方法
hashCode()
toString()
boolean equals(Object obj)
10. Iterator<E> iterator() :为什么要有Iterator
因为Collection的remove方法在迭代删除的时候不安全。
所以提供了iterator方法,返回迭代器。
通过迭代器遍历的时候删除数据是安全。
* */
Collection<LongCat> longCats = new ArrayList<LongCat>();
longCats.add(new LongCat("1001", "意大利"));
longCats.add(new LongCat("1002", "美国"));
longCats.add(new LongCat("1003", "香港"));
longCats.add(new LongCat("1004", "大陆"));
for (LongCat longCat2 : longCats) {
System.out.println(longCat2);
}
//看看包含不包含1002的龙猫boolean contains(Object o)
boolean bln = longCats.contains(
new LongCat("1002", "美国")
);
System.out.println(bln);
//演示循环的时候删除数据
//longCats.remove(new LongCat("1002", "美国"));
Iterator<LongCat> it = longCats.iterator();
while(it.hasNext())
{
LongCat cat = it.next();
//it.remove();
}
for (LongCat longCat2 : longCats) {
System.out.println(longCat2);
}
/*
<T> T[] toArray(T[] a)
*/
LongCat[] cats = new LongCat[longCats.size()];
LongCat[] cats2 = longCats.toArray(cats);
for (int i = 0; i < cats2.length; i++) {
System.out.println(cats2[i]);
}
}
}
class LongCat implements Comparable<LongCat>
{
private String dna;
public String getDna() {
return dna;
}
public void setDna(String dna) {
this.dna = dna;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
public LongCat(String dna, String name) {
super();
this.dna = dna;
this.name = name;
}
@Override
public String toString() {
return "LongCat [dna=" + dna + ", name=" + name + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((dna == null) ? 0 : dna.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;
LongCat other = (LongCat) obj;
if (dna == null) {
if (other.dna != null)
return false;
} else if (!dna.equals(other.dna))
return false;
return true;
}
@Override
public int compareTo(LongCat o) {
return o.getDna().compareTo(this.getDna());
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2