第4章 集合类

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

java提供了一种可以存数一组数据的数据结构,其提供了丰富的方法,在实际开发中往往比数组使用的广泛。这种数据结构成为集合:Collection。

Collection是一个接口,其定义了集合的相关功能方法。

List接口是Collection的子接口,用于定义线性表数据结构;

可以将List理解为存放对象的数组,只不过其元素个数可以动态的增加或减少。并且List是可重复集.

List接口的两个常见实现类为ArrayList和LinkedList,分别用动态数组和链表的方式实现了List接口。

可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别,ArrayList更适合于随机访问而LinkedList更适合于插入和删除;在性能要求不是特别苛刻的情形下可以忽略这个差别。

4.1List接口——有序集合类279

4.1.1add方法——向列表中插入元素279

List<String> list =newArrayList<String>();

list.add("java");

list.add("cpp");

list.add("php");

list.add("c#");

list.add("objective-c");

4.1.2addAll方法——将指定collection添加到列表中280

List<String> list =newArrayList<String>();

list.add("java");

list.add("cpp");

list.add("php");

list.add("c#");

list.add("objective-c");//addAll方法用于将给定集合中的所有元素添加到当前集合中List<String> list2 =newArrayList<String>();

list2.addAll(list);

System.out.PRintln(list2);

4.1.3clear方法——从列表中移除所有元素282

4.1.4contains方法——判断列表中是否包含指定元素283

4.1.5containsAll方法——判断列表中是否包含指定collection所有元素283

4.1.6equals方法——比较指定的对象与列表是否相等285

4.1.7get方法——获取列表指定位置的元素285

4.1.8set方法——替换列表中指定位置的元素286

List<String> list =newArrayList<String>();

list.add("java");

list.add("cpp");

list.add("php");

list.add("c#");

list.add("objective-c");//get方法遍历Listfor(inti = 0; i < list.size(); i++) {

System.out.println(list.get(i));

}

String value= list.set(1, "c++");

System.out.println(value);//cppSystem.out.println(list);//[java, c++, php, c#, objective-c]//交换位置1和3上的元素list.set(1, list.set(3, list.get(1)));

System.out.println(list);//[java, c#, php, c++, objective-c]

4.1.9hashCode方法——返回列表的哈希码值287

4.1.10indexOf方法——返回第一次出现指定元素的位置287

4.1.11lastIndexOf方法——返回最后一次出现指定元素的位置288

4.1.12isEmpty方法——判断集合是否为空289

4.1.13iterator方法——返回迭代器290

4.1.14listIterator方法——返回列表迭代器290

Collection提供了一个遍历集合的通用方式,迭代器(Iterator)。获取迭代器的方式是使用Collection定义的方法:

迭代器Iterator是一个接口,集合在覆盖Collection的iterator()方法时提供了迭代器的实现。

Iterator提供了统一的遍历集合元素的方式。

迭代器用于遍历集合的两个主要方法:

boolean hasNext():判断集合是否还有元素可以遍历。E next():返回迭代的下一个元素遍历集合应遵循“先问后取”的方式,也就是说,应当在确定hasNext()方法的返回值为true的情况下再通过next()方法取元素。

由此可以看出,使用迭代器遍历集合是通过boolean值驱动的,所以它更适合使用while循环来遍历。

Collection<String> c =newHashSet<String>();

c.add("java");

c.add("cpp");

c.add("php");

c.add("c#");

c.add("objective-c");

Iterator<String> it =c.iterator();while(it.hasNext()) {

String str=it.next();

System.out.println(str);

}

4.1.15remove方法——移除列表中的指定元素292

4.1.16removeAll方法——从列表中移除指定collection包含的所有元素293

List<String> list =newArrayList<String>();

list.add("java");

list.add("c#");

System.out.println(list);//[java, c#]list.add(1, "cpp");

System.out.println(list);//[java, cpp, c#]list.remove(2);

System.out.println(list);//[java, cpp]list.removeAll(list);

System.out.println(list);

4.1.17retainAll方法——保留指定collection包含的所有元素294

4.1.18size方法——返回列表中元素的个数294

4.1.19subList方法——获取列表中指定范围的子列表295

List的subList方法用于获取子List。需要注意的是,subList获取的List与原List占有相同的存储空间,对子List的操作会影响的原List。

List<Integer> list =newArrayList<Integer>();for(inti = 0; i < 10; i++) {

list.add(i);

}

System.out.println(list);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]List<Integer> subList = list.subList(3, 8);

System.out.println(subList);//[3, 4, 5, 6, 7]//subList获得的List和源List占有相同的数据空间for(inti = 0; i < subList.size(); i++) {

subList.set(i, subList.get(i)* 10);

}

System.out.println(subList);//[30, 40, 50, 60, 70]System.out.println(list);//[0, 1, 2, 30, 40, 50, 60, 70, 8, 9]//可以用于删除连续元素list.subList(3, 8).clear();System.out.println(list);

4.1.20toArray方法——返回所有元素的数组296

List的toArray方法用于将集合转换为数组。但实际上该方法是在Collection中定义的,所以所有的集合都具备这个功能。

我们可以传入一个指定类型的数组,该数组的元素类型应与集合的元素类型一致。返回值则是转换后的数组,该数组会保存集合中所有的元素。

List<String> list =newArrayList<String>();

list.add("a");

list.add("b");

list.add("c");//通常我们传入的数组不需要给定长度String[] strArr = list.toArray(newString[] {});

System.out.println(Arrays.toString(strArr));//[a, b, c]

数组转化为list

//方法一String[] strArr = { "a", "b", "c"};

List<String> list =Arrays.asList(strArr);

System.out.println(list);//[a, b, c]//list.add("d");//会抛出UnsupportedOperationException//java.util.Arrays$ArrayListSystem.out.println(list.getClass().getName());//方法二List<String> list1 =newArrayList<String>();

list1.addAll(Arrays.asList(strArr));

list1.add("d");

System.out.println(list1);

4.2Map接口——映射集合类297

4.2.1clear方法——移除所有映射关系297

4.2.2containsKey方法——判断是否包含指定的键名298

4.2.3containsValue方法——判断是否包含指定的键值298

4.2.4equals方法——判断是否与指定的对象相同299

4.2.5get方法——返回指定键所映射的值300

4.2.6isEmpty方法——判断是否为空300

4.2.7keySet方法——获取Map集合的所有key301

4.2.8put方法——向指定索引位置添加对象301

4.2.9putAll方法——追加另一个Map对象到当前Map集合302

4.2.10remove方法——移除Map集合中指定键名的内容303

4.2.11size方法——获取Map集合类的大小304

4.2.12values方法——获取Map集合中所有键值对象304

4.3Set接口——无重复元素集合类305

4.3.1add方法——向Set集合中添加对象305

4.3.2addAll方法——向Set集合添加另一个集合的所有内容306

4.3.3clear方法——从Set集合中移除所有内容307

4.3.4contains方法——判断Set集合是否包含指定对象307

4.3.5containsAll方法——判断Set集合是否包含另一个集合中全部对象308

4.3.6equals方法——比较指定对象与此Set是否相等309

4.3.7isEmpty方法——判断Set集合是否为空309

4.3.8iterator方法——获取Set集合的迭代器310

4.3.9remove方法——移除Set集合中指定对象311

4.3.10removeAll方法——移除另一个集合所包含的所有内容311

4.3.11retainAll方法——保留另一个集合所包含的所有内容312

4.3.12size方法——获取Set集合类的大小313

4.3.13toArray方法——用Set集合的所有对象创建数组313

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航