标签:体系 map java 框架 list System println 集合 out
集合框架体系
##集合的种类:单列集合,双列集合
————Collection接口有两个重要的子接口:List Set 他们的实现子类都是单列集合
###1.单列集合
ArrayList arrayList = new ArrayList();
arrayList.add("java");
arrayList.add("c++");
UML类图:
Collection接口实现类的特点:
- collection的实现子类可以存放多个元素,每个元素都是object
- collection的实现子类有些可以存放重复的元素,有些不可以
- collection的实现子类有些是有序的 List(有序),有些是无序的(set)
- collection接口没有直接的实现子类,都是通过它的Set和List接口实现的
collection接口和常用的方法:
List list = new ArrayList();
//add:添加
list.add("java");//通过java的自动装箱,我们存储的是一个一个的对象
list.add(10);//list.add(new Integer(10))
list.add(true);
System.out.println(list);
//remove:删除
list.remove(0);//删除脚标为0的元素
list.remove(true);//删除指定元素
System.out.println(list);
//contains:查找元素是否存在
System.out.println(list.contains(10));
//size:获取元素的个数
System.out.println(list.size());
//isEmpty:判断结合是否为空
System.out.println(list.isEmpty());
//clear:清空集合
list.clear();
System.out.println(list.size());
//addAll:添加多个元素
List list2 = new ArrayList();
list2.add("c++");
list2.add("go");
list.addAll(list2);
System.out.println(list);
List接口:
- List集合中的元素都是有序的,(按照存储的顺序取出),可以添加重复元素。
- 集合中的所有元素都有自己的对应的顺序索引,可以支持索引
- JDK API中List接口的实现类有很多
List接口中的常用方法:
List list = new ArrayList();
list.add("java");
list.add("c++");
//1.可以按照索引插入list.add()
list.add(1,"Python");
//2.list.get(索引位置)
System.out.println( list.get(1));//Python
//3.list.indexOf()返回元素第一此出现的位置
System.out.println(list.indexOf("java"));//1
//4.list.lastIndexOf()返回元素最后一次出现的位置
System.out.println(list.lastIndexOf("java"));
//5.list.remove()删除对应索引位置的元素
System.out.println(list.remove(0));
//6.list.set(1,"java1")修改指定位置上的元素的信息
//注意,索引的位置必须存在
list.set(1,"java1");
System.out.println(list);
//list.subList(0,2)返回起始索引到末尾索引的子集合[0,1)左闭右开
list.subList(0,2);
System.out.println(list);//[java, c++]
set接口
- 无序,添加和取出数据的顺序不一样,没有索引
- 不可以添加重复的元素
- JDK API中的set接口的实现类很多
set接口常用的方法:
*说明:和list一样作为collection接口的子接口,常用方法和collection接口的常用方法一样
*区别:不可以使用索引的方法来进行查询和添加
//以Set接口的实现类HashSet来讲解Set
Set set = new HashSet();
//1.存放对象是无序的(添加和取出的顺序是不一致的)
//注意:虽然第一次输出无序,但是输出一次之后,以后每次输出的顺序是不变的
//2.不可以存放重复的元素
//3.可以添加空值
set.add("java");
set.add("java");
set.add("c++");
set.add("c#");
set.add("Python");
set.add(null);
System.out.println("第一次输出"+set);
System.out.println("第二次输出"+set);
//1.遍历的方法也是迭代器
Iterator iterator = set.iterator();
while (iterator.hasNext()){
Object object = iterator.next();
System.out.println(object);
}
System.out.println("++++++++++++++++++++++");
//2.增强for循环
for (Object o :set) {
System.out.println(o);
}
}
第一次输出[c#, null, c++, java, Python]
第二次输出[c#, null, c++, java, Python]
c#
null
c++
java
Python
++++++++++++++++++++++
c#
null
c++
java
Python
——————Map接口实现的子类是双列集合,存放的是 key-value
###2.双列集合
HashMap map = new HashMap();
map.put("1","java");
map.put("2","c++");
1.Map接口和常用的方法:
基本:
//Map接口的实现类 ,HashMap为例:
Map map = new HashMap();
//1.Map和Collection并列,主要都是保存具有映射关系的数据:key — value
//2.Map中的key 和 value可以是任何引用累类型的数据,都存放在HashMap$Node对象中
//3.Map中的key不可以重复,但是value值可以重复
//4.Map中的key 和 value都可以为空,但是key为空只可以有一个,但是value为空可以有多个
//5.通常使用 String类作为key,但是不代表只可以使用String
//6.key 和 value存在着一一对应的关系,指的是,通过Key 只可以找到唯一的value
map.put("No1","java");
map.put("No2","c++");
map.put("No1","c#");
map.put("No3","java");
map.put("No6","java");
map.put(1,"go");
map.put(null,null);
map.put("No5",null);
System.out.println("map = " + map);
}
结果输出:
map = {No2=c++, null=null, No1=c#, 1=go, No3=java, No6=java, No5=null}
2.特点之难点:
Map存放数据的key - value示意图:、
Map map =new HashMap();
//1.k-v 最后是 HashMap$Node node = newNode(hash, key, value, null);
//2.k-v 为了方便程序员遍历,会创建一个EntrySet的集合,这个集合中存放的元素类型就是Entry
//而一个Entry对象就有一对 k-V, EntrySet<Entry<K,V>> 即:transient Set<Map.Entry<K,V>> EntrySet
//3.此时:static class Node<K,V> implements Map.Entry<K,V>
//4.当把 HashMap$Node对象存放到EntrySet就方便了我们遍历,因为Map.Entry 提供了重要的方法:
//getKey(); getValue();
map.put(1,"java");
map.put(2,"c++");
3.Map接口的遍历方法:
public static void main(String[] args) {
Map map = new HashMap();
map.put("No1","java");
map.put("No2","c++");
map.put("No3","j#");
map.put("No4","go");
//1.取出所有的key,通过key取出value
Set keyset = map.keySet();
//方式一:增强for
for (Object key :keyset) {
System.out.println(key + "-->" + map.get(key));
}
//No2-->c++
//No1-->java
//No4-->go
//No3-->j#
//方式二:迭代器
Iterator iterator = keyset.iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println(key + "-->" + map.get(key));
}
//2.取出所有的value值
Collection values = map.values();
//方式一:增强for
for (Object value : values) {
System.out.println(value);
}
//c++
//java
//go
//j#
//方式二:迭代器
Iterator iterator1 = values.iterator();
while (iterator1.hasNext()) {
Object value = iterator1.next();
System.out.println(value);
}
//3.通过EntrySet获取k-V
Set entryset = map.entrySet();//EntrySet<Map.Entry<K,V>>
//方式一:增强for循环
for (Object entry :entryset) {
//先将entry转换为Map.Entry对象
Map.Entry m = (Map.Entry)entry;
//Map.Entry提供的两个方法:
System.out.println(m.getKey() +"-->"+m.getValue());
}
//方式二:迭代器
Iterator iterator2 = entryset.iterator();
while (iterator2.hasNext()) {
Object entry= iterator2.next();
//向下转型为一个Map.Entry对象
Map.Entry m = (Map.Entry)entry;
System.out.println(m.getKey() +"-->"+m.getValue());
}
}
标签:体系,map,java,框架,list,System,println,集合,out 来源: https://blog.csdn.net/qq_44877364/article/details/117120571
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。