Java集合框架设计巧妙!刚开始接触时,老是被他们复杂的关系困惑!特别是Map!今天看到这样一篇文章,讲述了
Collection和Map的视图技术,令我豁然开朗!
比如:Map.keySet(),Map.values(),Map.entrySet().可以得到三个视图:键值,值,键/值对。对视图的操作,
将直接影响原始集合!
一: 轻量级集合包装器:
String[] temp=new String[20];
List<String> tempList=Arrays.asList(temp);
以上代码返回的不是一个ArrayList,而是一个视图对象,你只能使用get(),set()方法访问底层的数组,而任何尝试
改变数组大小的方法都抛出UnsupportedOperationException。用Junit测试Collections.nCopies(int n, T o)
public void testCollectionnCopies(){
List<String> settings=Collections.nCopies(5, "Baby");
String testStr1=settings.get(1);
String testStr0=settings.get(0);
System.out.println(testStr1==testStr0);//返回true
System.out.println(testStr1);
settings.add("B");//抛出UnsupportedOperationException
System.out.println(settings);
}
同时:还有Collections.singleton(anObject)等实用的方法。
二:子范围
你可以为许多集合建立子范围视图!任何操作作用于子范围,他们都能通过在这个集合中反映出来!
如:subList(),subSet(),headSet(),tailSet(),subMap().headMap(),tailMap()
public void testsubView(){
List<String> tempList=new ArrayList<String>();
for(int i=0;i<10;i++){
tempList.add(""+i);
}
List subList=tempList.subList(3, 7);
System.out.println(subList);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
subList.clear();
System.out.println(tempList);[0, 1, 2, 7, 8, 9]
}
注:Map返回由键值定范围内的所有数据项。
三:不可修改视图
如果你想查看代码的某个部分但不修改某个集合的内容可以考虑以下方法:
Collections.unmodifiableCollection()
Collections.unmodifiableList()
Collections.unmodifiableMap()
Collections.unmodifiableSet()
Collections.unmodifiableSortedSet()
Collections.unmodifiableSortedMap()
code:
public void testUnmodifiable(){
List<String> tempList=new LinkedList();
for(int i=0;i<10;i++){
tempList.add(""+i);
}
List<String> unmodifiableList=Collections.unmodifiableList(tempList);
String temp=unmodifiableList.get(1);
System.out.println(tempList);
tempList.add("baby");
System.out.println(tempList);
unmodifiableList.add("bb");
System.out.println(tempList);
}
注意:不可修改视图不是本省不可修改,通过集合的原始引用,我们仍然能够做集合想做的事情。视图只包装了接口而不是实际的对象。
四:同步视图
多线程来访问一个集合!我们能够想象会发生什么。一个线程试图将一个元素添加到散列表中,而另一个线程或者正在遍
历,或者对元素重新散列!或者。。。。。。
Java的设计者没有实现“安全集合类”,而是使用视图机制来保证集合线程的安全!
HashMap<String,String> hashMap=new HashMap<String,String>();
Map<String,String> map=Collections.synchronizedMap(hashMap);
map引用将会使得一切恢复正常!不必担心同步的问题!但是这个包装器的作用有限:推荐使用:java.util.concurrent
中定义的集合类!
五:被检验视图
它是关于泛型的操作!
分享到:
相关推荐
在这个“ios-导航条弹出视图.zip”项目中,开发者ZhaoFeiK创建了一个名为PopupView的库,专门用于在导航条上实现各种弹出视图效果。这个库可能是通过GitHub仓库“git@github.com:ZhaoFeiK/PopupView.git”进行维护和...
这段代码创建了一个空数组`a`,然后迭代`ViewCollection`中的每个视图,将视图的名称添加到数组`a`中。`v[i].getName()`返回视图的名称,这是我们需要在组合框中显示的信息。 5. **设置组合框数据源** 获取到视图...
本教程聚焦于iOS中的多媒体转场动画,特别是如何在CollectionView集合视图中实现缩略图的平滑过渡效果,使用的是17Hero4-Collection库。下面将详细阐述这个知识点。 首先,`UICollectionView`是iOS中一个强大的控件...
24expanding-collection是一种实现此类效果的技术或框架,它可能包含了一个可扩展的集合视图(collectionView),使得卡片可以展开或收拢,为用户提供了丰富的视觉体验和交互性。 在iOS应用中,集合视图...
- **产品简介**:Telerik UI for WPF 是一套针对Windows Presentation Foundation(WPF)平台的UI控件集,包含了大量的专业控件,如图表、网格视图等。 - **适用场景**:适用于WPF桌面应用程序的开发。 ### 4. **...
通过Swift或Objective-C代码,开发者可以方便地创建实例,设置动画样式,并将其添加到视图层次结构中。 此外,NVActivityIndicatorView的开源性质使得开发者能够查看源代码,学习和理解动画的实现原理。这对于提高...
在IT行业中,表格(Table)和集合视图(CollectionView)是两种常见的用户界面元素,用于展示数据集。这些组件在iOS、macOS等操作系统以及Web应用中广泛应用。本项目"TableAndCollectionVIew:所有表和集合视图示例...
- **视图共享与导航**:虚拟协作系统需要支持用户之间进行有效的视图共享和导航,以便更好地协作。 - **修改与议程控制**:系统需要允许用户对共享内容进行修改,并支持对会议或协作活动的议程进行控制。 - **访问...
在iOS开发中,UICollectionView是一种非常强大的视图组件,它允许我们以网格、流水或自定义的方式展示内容。这个“ios-自定义collection view布局,相册.zip”项目显然是为了教授如何为UICollectionView创建自定义...
- **调试视图(Debugging Views)**:使用工具和技术来检测和修复视图中的问题。 2. **操作表单(Action Sheets)** - **配置操作表单(Configuring Action Sheets)**:操作表单是一种用于呈现选项列表的视图控制器。 ...
在本书的第一部分“Views”中,主要介绍了iOS应用中的视图(View)概念,以及与视图相关的各种技术点。首先,讲述了视图的基本概念,包括视图的层级结构、视图的可见性与不透明度、视图的框架(Frame)和边界...
在`DWTableView_Collection`中,主要涉及以下技术点: 1. **嵌套视图控制器**:项目可能使用了`UINavigationController`或`UITabBarController`来管理主界面,并通过`addChildViewController`方法将TableView和...
这种效果可以通过多种技术实现,其中最常用的是使用Core Animation和自定义视图来创建。下面我们将深入探讨如何在iOS应用中实现这样的效果。 首先,我们关注的是"视图动画"这个标签,它表明我们要使用iOS的动画框架...
- **内容(Content of Views)**:讨论如何在视图中设置和管理内容。 - **行为(Behavior of Views)**:描述了视图如何响应用户交互和其他事件。 - **外观(Appearance of Views)**: - **背景颜色和透明度...
系统实现中,设备管理系统利用图表、PivotTable视图和切片等交互手段,对设备信息进行高效管理和分析,如设备类型、品牌、使用状态和位置等。用户可以根据需求定制筛选条件,查看设备详细信息,甚至下载相关资料。...
1. **UI设计**:源代码中包含了各种自定义视图和布局的实现,如滑动抽屉、下拉刷新、轮播图等,这些都是Android应用中常见的交互元素。通过研究这些源码,开发者可以学习如何创建流畅、个性化的用户界面,提高用户...
总结一下,数据集是存储和管理数据的结构,而数据绑定是连接数据集与用户界面的技术,使数据的变化实时体现在用户可见的部分。在Java编程中,理解并熟练掌握数据集和数据绑定的概念,对于开发出高效、动态的用户界面...
本文将详细讲解如何通过自定义UICollectionViewLayout来实现“iOS-Cell倾斜的效果-26CollectionViewSlantedLayout”这一技术。 首先,我们需要了解UICollectionViewLayout。UICollectionViewLayout是...
Backbone JS是另一种轻量级的前端框架,强调结构和组织,它提供了Model、View、Collection和Router等组件,帮助开发者构建复杂的单页面应用。Backbone JS的核心是事件驱动,注重保持视图和模型同步,但它的数据绑定...
集合框架是Java中非常重要的一部分,它主要包括两大部分:`Collection` 和 `Map`。 - `Collection` 主要包含 `List` 和 `Set`,它们分别代表有序集合和无序且不重复元素的集合。 - `Map` 存储键值对。 常见的集合...