1集合框架
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f28c3de7d79831f660fe9e1c2bacfb83.png#pic_center)
2.Collection 接口
2.1 常用方法
boolean add(Object obj)
boolean addAll(Collection coll)
int size()
void clear()
boolean isEmpty()
boolean contains(Object obj)
boolean containsAll(Collection coll)
boolean remove(Object obj)
要删除的元素且只会删除找到的第一个元素)
boolean removeAll(Collection coll)
boolean retainAll(Collection coll)
boolean equals(Object obj)
Object[] toArray()
int hashCode()
Iterator<E> iterator()
2.2 几点说明
- Collection 接口是 List、Set 接口的父接口。则Collection接口里定义的方法可用于操作 Set、List 集合
- Collection接口中并没有实现如下方法,而是在相应的实现类中实现的
- contains( )、containsAll( )、remove( )、removeAll( )、retainAll( ) 都调用了equals( )方法。Collection接口的实现类中一般需要重写equals( )方法 ( 若不重写则调用object类中的equals( )方法:比较地址)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/30bdf8fc9ae8c7e5ff4659c27bc7bcff.jpeg#pic_center)
Collection coll=new ArrayList();
coll.add("abc");
System.out.println(coll.contains(new String("abc")));
Person person=new Person("Tom", 20);
coll.add(person);
System.out.println(coll.contains(new Person("Tom", 20)));
Man man=new Man("Bob", 22);
coll.add(man);
System.out.println(coll.contains(new Man("Bob", 22)));
3. Iterator迭代器
Iterator迭代器
4. List接口
4.1 ArrayList与LinkedList
ArrayList与LinkedList
4.2 List 接口常用方法
- List除了从Collection集合继承的方法外,还增加了一些额外的方法
void add(int index, Object ele)
boolean addAll(int index, Collection coll)
Object get(int index)
int indexOf(Object obj)
int lastIndexOf(Object obj)
Object remove(int index)
Object set(int index, Object ele)
List subList(int fromIndex, int toIndex)
5. Set 接口
- set接口只继承了Collection接口的方法,没有提供额外的方法
- 存储无序的、不可重复的数据
5.1 HashSet
- 底层是 HashMap 实现( 可直接查看HashMap ,HashSet中的元素相当于HashMap中的key)
5.2 LinkedHashSet
- 底层是 LinkedHashMap 实现( 可直接查看LinkedHashMap ,HashSet中的元素相当于LinkedHashMap中的key)
5.3 TreeSet
- 底层是 TreeMap 实现( 可直接查看TreeMap ,TreeSet中的元素相当于TreeMap中的key)
6. Map接口
- 存储具有映射关系“key-value”的集合
- Map中的key不能重复,value可以重复(所以不管是HashMap、LinkedHashMap、TreeMap 其key不能重复,value可以重复)
6.1 常用方法
1.添加、删除、修改操作
Object put(Object key,Object value)
void putAll(Map m)
Object remove(Object key)
void clear()
2.元素查询的操作:
Object get(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
boolean equals(Object obj)
3.元视图操作的方法:
Set keySet()
Collection values()
Set entrySet()
HashMap hashmap = new HashMap();
hashmap.put("AA", 12);
hashmap.put("BB", 34);
hashmap.put("CC", 56);
Set set = hashmap.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext())
{
System.out.println(iterator.next());
}
System.out.println("*******************");
Collection values = hashmap.values();
Iterator iterator1 = values.iterator();
while (iterator1.hasNext())
{
System.out.println(iterator1.next());
}
System.out.println("*******************");
Set entrySet = hashmap.entrySet();
Iterator iterator2 = entrySet.iterator();
while (iterator2.hasNext())
{
Object obj = iterator2.next();
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + "-->" + entry.getValue());
}
System.out.println("********************");
Set keySet = hashmap.keySet();
Iterator iterator3 = keySet.iterator();
while (iterator3.hasNext())
{
Object key = iterator3.next();
Object value = hashmap.get(key);
System.out.println(key + "—" + value);
}
6.2 HashMap
深入理解HashMap
6.3 LinkedHashMap
- 存储无序、不可重复的元素。但是可以按照添加的顺序进行遍历。因为LinkedHashSet 虽然是根据元素的 hash 值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来是以插入顺序保存的
- LinkedHashmap插入性能略低于 HashMap(因为要多维护两个保存地址的value),但在迭代访问 Map 里的全部元素时有很好的性能。
LinkedHashMap lhm=new LinkedHashMap();
lhm.put("abc", 20);
lhm.put("def", 20);
lhm.put("ghi", 20);
System.out.println(lhm);
6.4 TreeMap
- TreeMap底层使用红黑树结构存储数据,查询速度较快
- TreeMap 可以确保集合中的key处于排序状态
- 向TreeMap中添加的数据,要求key是相同类的对象(因为涉及到排序,无法对不同对象进行排序),value可以不同
- 向TreeMap添加的key对应的类需要实现Comparable 或Comparator 接口。
排序时比较两个对象是否相同的唯一标准为:compareTo()返回0 或compare()返回0 。(则不用再重写hashcode()、equals() 方法)
所以可以向TreeMap集合中key添加相同的元素,取决于实现比较器接口的方法(但是一般不这么做,因为违背了Map集合设计的初衷)
public class Person implements Comparable
{
String name;
int No;
public Person(String name,int No)
{
this.No=No;
this.name=name;
}
public String toString()
{
return "Person [name=" + name + ", No=" + No + "]";
}
@Override
public int compareTo(Object o)
{
if(o instanceof Person)
{
Person p=(Person)o;
int Nametemp=this.name.compareTo(p.name);
if(Nametemp>0)
return 1;
else if (Nametemp<0)
return -1;
else {
int Notemp=Integer.compare(this.No, p.No);
return Notemp> 0 ? 1:-1;
}
}
throw new RuntimeException("类型不一致");
}
}
TreeMap treeMap=new TreeMap();
treeMap.put(new Person("Tom", 12), 170);
treeMap.put(new Person("Tom", 12), "abd");
treeMap.put(new Person("Tom", 12), 170);
System.out.println(treeMap);
7.Collections工具类
- Collections 是一个操作 Set、List 和 Map 等集合的工具类
reverse(List):反转 List 中元素的顺序
shuffle(List):对 List 集合元素进行随机排序
sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
Object min(Collection)
Object min(Collection,Comparator)
int frequency(Collection,Object):返回指定集合中指定元素的出现次数
void copy(List dest,List src):将src中的内容复制到dest中
boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值