1.普通数组
1.定义数组
String str[]=new String[3];
2.缺点
1.定长 2.固定类型
2.Collection
老祖先Collection是一个接口
其父接口为Iterator
子接口有 List , Set(List有索引,Set无索引)
Collection有许多方法,但都只是抽象方法,没有进行实现,没法用,实现的工作交给实现类去做。
boolean | add(E e) 确保此 collection 包含指定的元素(可选操作)。 | |
boolean | addAll(Collection<? extendsE> c) 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 | |
void | clear() 移除此 collection 中的所有元素(可选操作)。 | |
boolean | contains(Object o) 如果此 collection 包含指定的元素,则返回 true。 | |
boolean | containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。 | |
boolean | equals(Object o) 比较此 collection 与指定对象是否相等。 | |
int | hashCode() 返回此 collection 的哈希码值。 | |
boolean | isEmpty() 如果此 collection 不包含元素,则返回 true。 | |
Iterator<E> | iterator() 返回在此 collection 的元素上进行迭代的迭代器。 | |
boolean | remove(Object o) 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 | |
boolean | removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 | |
boolean | retainAll(Collection<?> c) 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 | |
int | size() 返回此 collection 中的元素数。 | |
Object[] | toArray() 返回包含此 collection 中所有元素的数组。 | |
| toArray(T[] a) 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 |
3.
Collection的1子接口
List
List继承了Collection,除了从父类继承一些抽象方法,自己也添加了特有的抽象方法。其新方法特点就是:索引
int | indexOf(Object o) 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。 |
int | lastIndexOf(Object o) 返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。 |
ListIterator<E> | listIterator() 返回此列表元素的列表迭代器(按适当顺序)。 |
ListIterator<E> | listIterator(int index) 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。 |
4.
List的1实现类Array
List
ArrayList的特点就是动态数组,也就是数组的长度可变。
1.使用数组
创建动态数组
ArrayList<String> al=new ArrayList<String>();
添加数组元素
al.add("上海"); //按顺序添加
al.add(0,"汕头"); //向列表指定位置添加元素
修改元素
al.set(0,"潮汕"); //这里就将0位置的元素进行修改
遍历数组
Iterator<String> it=
al.iterator(); //遍历每一个元素
while(it.hasNext()){ //当存在元素的时候进行打印
syso(it.next); //也可以用al.get(i) 来获取打印元素
}
删除元素
al.remove(1); //删除第二个元素
5.
List的2实现类Linked
List
LinkedList和ArrayList的区别就是:
ArrayList基于数据结构,适合查询和修改(较多考虑)
LinKedList基于链表结构,适合增加和删除
6.
Collection的2子接口Set
集合存储的是对象的引用(地址信息),对象存在堆(heap)里面
List和Set的区别就是索引与重复:
List有索引,可以重复
Set没有索引,不能重复
Set继承了Collection接口的方法,但是并没有提供新方法,它只提供了自身特性:唯一性
7.Set的1实现类HashS
et
HashSet的使用跟ArrayList一样,区别就在于:
1.
存储时
没有索引 2.打印出来的东西没有顺序 3.存储同样的信息会覆盖
通过哈希表存储
8.Set的1实现类TreeS
et
TreeSet跟HashSet的区别就在于,HashSet是无序的,而TreeSet是有序的。但是其排序仅对英文有效,对中文无效
但是当存储的东西是一个对象的时候,
通过二叉树存储
1.使用数组
添加对象元素
ts.add(new Person("Jack",20));
遍历数组
Iterator<Person
> it=ts
.iterator(); //遍历每一个元素
while(it.hasNext()){ //因为TreeSet需要遵循一定的顺序,所以定义顺序规则
Person p=it.next();
p.print(); //只要实现
Comparable<Person>接口才能正常打印
}
定义TreeSet的排序规则:
方法一:在声明类的时候,实现Comparable<Person>接口,然后编辑接口的方法
接口的方法编写方式:
if(this.age>o.age){ //o是传值
return 1; //1的意思就是大于
}else if(this.age<o.age){
return -1;
}
return 0; //否则返回0
方法二:
也可以新建一个类,实现其接口
(简约版):
直接return.name.compareTo(o2.name);
传比较器对象:TreeSet<Dog> ts=new TreeSet<Dog>(new MyCom());
9.Map
老祖先Map也是一个接口,但是两大支派区别就在于Map是双列集合(key-value)
Map的实现类主要有两个:1.HashMap 2.TreeMap
10.Map的1实现类HashMap
HashMap的跟HashSet的区别就是,Map系列是双列集合。
Map还有一个规定:键不能重复,value可以重复
1.使用数组
创建数组
HashMap<String,String> cities=new HashMap<String,String>();
添加数据
cities.put("010","汕头");
获取所有键的集合
Set<String> codes=cities.keySet(); //获得键的集合是Set类型
Set可以用Iterator()循环遍历
获取所有值的集合
Collection<String> cityNames=cities.values(); //获得值的集合,类型是Collection
通过键获取值
String cityName=cities.get(codes.iterator().next()); //将键传进去,获取相应的值
获取一条项目:键+值
Set<Entry<String,String>> entries=cities.entrySet();
用Iterator遍历打印
Iterator<Entry<String,String>> it=entries.iterator();
while(it.hasNext()){
Entry<String,String>entry=it.next;
syso(entry.getKey()+":"+entry.getValue());
}
11.Map的2实现类TreeMap
跟HashMap的区别就是键是有序的。
这里我们用一段公式做一个简单的总结,是属于非常不严谨有误区的公式,仅作为帮助记忆所用
存储+查询=ArrayList
存储+增删=LinkList
ArrayList+唯一=HashSet
HashSet+排序=TreeSet
HashSet+值=HashMap
HashMap+排序=TreeMap