- 浏览: 286258 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
86614009:
如何在service层,如何获取绑定到当前线程的entitna ...
使用spring的OpenEntityManagerInView -
yajunyajun2011:
好帖子 怎么没人顶呢
Java 正则表达式最大,最小匹配问题 -
xtuali:
能说明一下,你的nutch是哪个版本的吗?谢谢!
搜索引擎Nutch源代码研究之一 网页抓取(1) -
dongmusic:
需要学习这么多的东西,吐血中...
如何提高Java开发能力 -
jiminsc:
cool
LDAP 验证、添加、修改、删除(转)
Vector和ArrayList的区别
Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间
Hashtable和HashMap区别
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是
ArrayList和LinkedList区别
对于处理一列数据项,Java提供了两个类ArrayList和LinkedList,ArrayList的内部实现是基于内部数组Object[],所 以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别
从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能
而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了
如果在编程中,1,2两种情形交替出现,这时,你可以考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证
配置集合类的初始大小
在Java集合框架中的大部分类的大小是可以随着元素个数的增加而相应的增加的,我们似乎不用关心它的初始大小,但如果我们考虑类的性能问题时,就一定要考虑尽可能地设置好集合对象的初始大小,这将大大提高代码的性能
比如,Hashtable缺省的初始大小为101,载入因子为0.75,即如果其中的元素个数超过75个,它就必须增加大小并重新组织元素,所以,如果你 知道在创建一个新的Hashtable对象时就知道元素的确切数目如为110,那么,就应将其初始大小设为110/0.75=148,这样,就可以避免重 新组织内存并增加大小
线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构这些类均在java.util包中本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类
Collection
List
LinkedList
ArrayList
Vector
Stack
Set
Map
Hashtable
HashMap
WeakHashMap
Collection接口
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)一些Collection允许相同的元素而另一些不行一些能排序而另一些不行Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的子接口如List和Set
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素后一个构造函数允许用户复制一个Collection
如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素典型的用法如下:
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
由Collection接口派生的两个接口是List和Set
List接口
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组
和下面要提到的Set不同,List允许有相同的元素
除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历
实现List接口的常用类有LinkedList,ArrayList,Vector和Stack
LinkedList类
LinkedList实现了List接口,允许null元素此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)
注意LinkedList没有同步方法如果多个线程同时访问一个List,则必须自己实现访问同步一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
ArrayList类
ArrayList实现了可变大小的数组它允许所有元素,包括nullArrayList没有同步
size,isEmpty,get,set方法运行时间为常数但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间其他的方法运行时间为线性
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率
和LinkedList一样,ArrayList也是非同步的(unsynchronized)
Vector类
Vector非常类似ArrayList,但是Vector是同步的由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常
Stack 类
Stack继承自Vector,实现一个后进先出的堆栈Stack提供5个额外的方法使得Vector得以被当作堆栈使用基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置Stack刚创建后是空栈
Set接口
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素
很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素
请注意:必须小心操作可变对象(Mutable Object)如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题
Map接口
请注意,Map没有继承Collection接口,Map提供key到value的映射一个Map中不能包含相同的key,每个key只能映射一个valueMap接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射
Hashtable类
Hashtable继承Map接口,实现一个key-value映射的哈希表任何非空(non-null)的对象都可作为key或者value
添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数
Hashtable通过initial capacity和load factor两个参数调整性能通常缺省的load factor 0.75较好地实现了时间和空间的均衡增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作
使用Hashtable的简单示例如下,将1,2,3放到Hashtable中,他们的key分别是one,two,three:
Hashtable numbers = new Hashtable();
numbers.put(one, new Integer(1));
numbers.put(two, new Integer(2));
numbers.put(three, new Integer(3));
要取出一个数,比如2,用相应的key:
Integer n = (Integer)numbers.get(two);
System.out.println(two = + n);
由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作
如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个
Hashtable是同步的
HashMap类
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低
WeakHashMap类
WeakHashMap是一种改进的HashMap,它对key实行弱引用,如果一个key不再被外部所引用,那么该key可以被GC回收
总结
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变这就是针对抽象编程
Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间
Hashtable和HashMap区别
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是
ArrayList和LinkedList区别
对于处理一列数据项,Java提供了两个类ArrayList和LinkedList,ArrayList的内部实现是基于内部数组Object[],所 以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别
从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能
而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了
如果在编程中,1,2两种情形交替出现,这时,你可以考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证
配置集合类的初始大小
在Java集合框架中的大部分类的大小是可以随着元素个数的增加而相应的增加的,我们似乎不用关心它的初始大小,但如果我们考虑类的性能问题时,就一定要考虑尽可能地设置好集合对象的初始大小,这将大大提高代码的性能
比如,Hashtable缺省的初始大小为101,载入因子为0.75,即如果其中的元素个数超过75个,它就必须增加大小并重新组织元素,所以,如果你 知道在创建一个新的Hashtable对象时就知道元素的确切数目如为110,那么,就应将其初始大小设为110/0.75=148,这样,就可以避免重 新组织内存并增加大小
线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构这些类均在java.util包中本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类
Collection
List
LinkedList
ArrayList
Vector
Stack
Set
Map
Hashtable
HashMap
WeakHashMap
Collection接口
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)一些Collection允许相同的元素而另一些不行一些能排序而另一些不行Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的子接口如List和Set
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素后一个构造函数允许用户复制一个Collection
如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素典型的用法如下:
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
由Collection接口派生的两个接口是List和Set
List接口
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组
和下面要提到的Set不同,List允许有相同的元素
除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历
实现List接口的常用类有LinkedList,ArrayList,Vector和Stack
LinkedList类
LinkedList实现了List接口,允许null元素此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)
注意LinkedList没有同步方法如果多个线程同时访问一个List,则必须自己实现访问同步一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
ArrayList类
ArrayList实现了可变大小的数组它允许所有元素,包括nullArrayList没有同步
size,isEmpty,get,set方法运行时间为常数但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间其他的方法运行时间为线性
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率
和LinkedList一样,ArrayList也是非同步的(unsynchronized)
Vector类
Vector非常类似ArrayList,但是Vector是同步的由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常
Stack 类
Stack继承自Vector,实现一个后进先出的堆栈Stack提供5个额外的方法使得Vector得以被当作堆栈使用基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置Stack刚创建后是空栈
Set接口
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素
很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素
请注意:必须小心操作可变对象(Mutable Object)如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题
Map接口
请注意,Map没有继承Collection接口,Map提供key到value的映射一个Map中不能包含相同的key,每个key只能映射一个valueMap接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射
Hashtable类
Hashtable继承Map接口,实现一个key-value映射的哈希表任何非空(non-null)的对象都可作为key或者value
添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数
Hashtable通过initial capacity和load factor两个参数调整性能通常缺省的load factor 0.75较好地实现了时间和空间的均衡增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作
使用Hashtable的简单示例如下,将1,2,3放到Hashtable中,他们的key分别是one,two,three:
Hashtable numbers = new Hashtable();
numbers.put(one, new Integer(1));
numbers.put(two, new Integer(2));
numbers.put(three, new Integer(3));
要取出一个数,比如2,用相应的key:
Integer n = (Integer)numbers.get(two);
System.out.println(two = + n);
由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作
如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个
Hashtable是同步的
HashMap类
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低
WeakHashMap类
WeakHashMap是一种改进的HashMap,它对key实行弱引用,如果一个key不再被外部所引用,那么该key可以被GC回收
总结
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变这就是针对抽象编程
发表评论
-
Java中,对List存放的对象按指定属性排序
2014-06-27 18:15 1011转载的,试用过了,很好! /** * ... -
Interface和抽象类的应用
2012-09-23 19:36 785一个类可以(继承)实 ... -
linux下java开发应掌握的命令
2012-09-23 19:22 1098java开发,由于其很多应用都是发布在Linux操作系统上,因 ... -
Java程序员面试中的多线程问题
2012-06-01 16:55 9160.Java 中多线程同步是什 ... -
Java中的数据存储
2011-11-24 21:31 929在JAVA中,有六个不同的 ... -
Java经典收录,一直更新。。。
2011-11-17 13:45 749Thinking in Java,,敏捷软件开发原则、实践与设 ... -
如何提高Java开发能力
2011-11-15 19:17 13841.你需要精通面向对象 ... -
java.util.ResourceBundle使用详解
2011-08-28 16:32 700一、认识国际化资源文件 这个类提供软件国际化的捷径。通 ... -
抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
2011-07-05 11:05 1029抽象类和接口的区别: ... -
RMI规范--第八章 stub/skeleton 接口(转贴)
2011-06-27 18:33 2027另一篇文章也很好,收藏了: http://ajava ... -
将Unicode字符转换成中文
2011-02-27 13:34 890前段时间写的一个将Unicode字符转换为中文的方法,分享下, ... -
一个Java访问网页时URL重定向的问题
2011-02-25 16:53 3195这是去年年底一直想解决的问题(这么简单的问题,现在才解决,说出 ... -
JAVA虚拟机几个命令行参数说明
2011-02-22 10:13 780一、运行class文件执行带main方法的class文件, ... -
Java数组与容器类分析资料--数组、List和Set、Map
2011-02-22 09:47 1450Java容器分析--数组 数组是Java语言内置的 ... -
常用的 Http Response Code代码
2011-01-11 06:04 860100 Continue 初始的请求已经 ... -
IIS状态代码的含义
2011-01-10 18:59 677概要当用户试图通过HTTP或文件传输协议(FTP)访问一台正在 ... -
Iterator 引发的NoSuchElementException
2011-01-10 15:55 902while (it.hasNext()) { ... -
Firefox的IFrame编程
2010-11-12 10:54 683//最近碰到了很多ie和firefox的js问题,发现主要集 ... -
String和InputStream、Reader 的转换
2010-10-25 08:59 8581、 String --> InputStr ... -
java读取网站内容的两种方法
2010-10-24 19:36 7051,HttpClient利用apache的虚拟客户端包获取某个 ...
相关推荐
然而,网络接口和已挂载的块设备之间存在几个重要区别。例如,磁盘存在于/dev目录下的特殊文件中,而网络接口却没有这样的条目。网络接口不支持Unix的“一切都是文件”的方法,因为套接字的应用读写系统调用作用于与...
尽管它们的功能相似,但存在几个重要的区别: - **历史原因**:`Hashtable`是在Java早期版本中引入的,它继承自`Dictionary`类。而`HashMap`是在Java 1.2中引入的,作为`Map`接口的一个更现代的实现。 - **同步性...
### 数组与集合的几个区别(五个) #### 引言 在编程中,数组和集合都是非常重要的数据结构,用于存储一组相关的数据项。虽然它们在功能上有一定的相似性,但其实现方式、性能特点以及使用场景都有所不同。本文将...
在统计学领域,有几个核心概念对于理解和应用统计分析至关重要。首先,我们要理解总体与样本的概念。总体是指我们研究兴趣所在的全体对象,它可能是无限的或者非常庞大的。目标总体是我们最终想要得出结论的群体,...
初级模拟电路的两个重要方面是信号放大和提供信号源。模拟信号具有连续性,因此放大器需要在宽广的频率范围内保持其增益的一致性,以保持信号的完整性。 数字电路处理的是数字信号,它使用的是二进制数字信号,能够...
接着,PPT深入探讨了"几个"和"第几个"的区别。"几个"关注的是物体的总数,比如问有多少个苹果;而"第几个"关注的是特定位置的物体,如问第五个是什么。这种区分对于初学者来说至关重要,因为它有助于他们建立对数量...
以下是对项目售前几个主要阶段的详细解释: 1. **调研评估**:这是售前工作的起点,通常包括对客户业务的理解、市场需求的分析以及竞争对手的调查。这一阶段需要收集大量信息,了解客户的具体需求、业务痛点以及...
接下来,我们来看看undefined和null的几个重要区别: 1. undefined表示一个变量没有被声明,或者声明后没有被赋予值;null则是一个明确的值,表示变量有值但该值是“没有值”。 2. JavaScript会将未赋值的变量...
解决方案、项目、程序集、命名空间的区别 解决方案(Solution)是一种容器,用于存放多个项目,每个项目实现不同的功能,最后将这些项目组合起来,形成一个完整的...了解这四个概念的区别,对于软件开发是非常重要的。
- **C++几个重要的面试题.doc**:这可能包含C++特性的深入理解,如面向对象特性(封装、继承、多态)、模板、STL(标准模板库)的使用等。 - **C、C++笔试题大解析.doc**:此文档可能详尽解析了C和C++的笔试题目,...
单片机作为一种集成度极高的微型计算机,其学习过程中会遇到一些不易掌握的概念,本文将深入探讨其中几个关键概念,帮助初学者更好地理解和掌握单片机的原理与应用。 ### 总线 总线是单片机系统中非常重要的概念,...
typeof 一般只能返回以下几个结果:number, boolean, string, function, object, undefined。 使用 typeof 可以获取一个变量是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因为如果 a ...
标题中的“案列文件夹中有几个组太问题”和描述中的“案列文件夹中有几个教大家学习的组太方面的文件”可能是指一系列关于“组态”或“组态软件”的学习资料,其中包含了“几个问题”。从标签“几个问题”来看,我们...
本文旨在梳理电源相关的几个基本概念,包括电压源、电流源、恒压源以及恒流源,并探讨它们之间的区别与联系。这些概念的理解对于学习电工学至关重要。 #### 二、电压源和电流源 **电压源**与**电流源**是实际电源...
总结一下,这些面试题目涵盖了Java基础知识的多个方面,包括类集框架的理解,Spring框架的工作原理,源码阅读的重要性,动态代理的实现,JDK与JRE的区别,==与equals的区别,hashCode()和equals()的关系,final...
"几个java小程序"可能包含了一些简单的Java程序示例,这些示例可能是为了教学、练习或解决特定问题而编写的。在Java编程中,我们通常会遇到以下几个核心知识点: 1. **基础语法**:Java的基础语法包括变量声明、...
在C++中,类和继承是两个重要的概念,类的封装使得初学者对程序产生厌倦,感到不适和麻烦,而继承则使得初学者潜意识里对C语言的变量类型的重要性产生淡化。函数的重载、流操作符和操作符重载也是C++中重要的概念,...
在Oracle数据库的管理和使用过程中,有几个重要的概念常常被提及,但有时也容易被混淆,这些概念包括:数据库名(DB_NAME)、数据库实例名(INSTANCE_NAME)、操作系统环境变量ORACLE_SID、数据库服务名(SERVICE_...
- **核心观点**:高效能人士懂得在众多待办事项中找到真正重要的几个,而不是试图同时处理多项任务。他们意识到,过多的优先事项实际上等于没有优先事项。 - **实践建议**:采用“事不过三”的原则,即任何时候最多...