代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Reflection;
using System.Collections;

namespace WebAuditBLL.Core
{
    public class SortedBindingList<T> : IList<T>, IBindingList, IEnumerable<T>, ICancelAddNew
    {
        #region 字段与属性

// 源列表IList
        private IList<T> m_lsList;

// 源列表IBindingList
        private IBindingList m_lsBindingList;

// 是否已排了序
        private bool m_bSorted;

// 是否提供可邦定源
        private bool m_bSupportsBinding;

private bool m_bInitiatedLocally;

// 参与属性描述器
        private PropertyDescriptor m_objSortByPro;

// 不参与排序的属性描述器
        private PropertyDescriptor m_objNotSortPro;

// 不参与排序的属性描述器等于这些值不参与排序
        private string[] m_aryThisValueNotSort;

// 不参与排序的属性名
        private string[] m_aryNotSortStr;

// 排序方向
        private ListSortDirection m_objOrderDirect = ListSortDirection.Ascending;

// 排序列表
        private List<ListItem> m_lstSortIndex = new List<ListItem>();

// 最后一个是否参与排序
        private bool m_bIsSortLast = true;

/// <summary>
        /// 项发生变化的事件
        /// </summary>
        public event ListChangedEventHandler ListChanged;

/// <summary>
        /// 当BIsSortLast为flase时或对某些指定值的行不作排序(即用于构造函数3)才可能发出此事件,这事件作用是用来设置“合计”,“小计”那行的风格
        /// </summary>
        public event ListChangedEventHandler ListChangedForIsSortLast;

/// <summary>
        /// 原数据源
        /// </summary>
        [EditorBrowsable(EditorBrowsableState.Advanced)]
        public IList<T> SourceList
        {
            get
            {
                return m_lsList;
            }
        }

/// <summary>
        /// 是否已排了序
        /// </summary>
        public bool IsSorted
        {
            get
            {
                return m_bSorted;
            }
        }

/// <summary>
        /// 最后一个是否参与排序
        /// </summary>
        public bool BIsSortLast
        {
            get { return m_bIsSortLast; }

set { m_bIsSortLast = value; }
        }

#endregion

/// <summary>
        /// 构造函数1
        /// </summary>
        /// <param name="list"></param>
        public SortedBindingList(IList<T> lsList)
        {
            m_lsList = lsList;

if (m_lsList is IBindingList)
            {
                m_bSupportsBinding = true;

m_lsBindingList = (IBindingList)m_lsList;

m_lsBindingList.ListChanged += new ListChangedEventHandler(SourceChanged);
            }
        }

/// <summary>
        /// 构造函数2
        /// </summary>
        /// <param name="lsList"></param>
        /// <param name="bF">该参数的插入只是为了区分构造函数3,可为任意值</param>
        /// <param name="aryNotSortStr">不参与排序的属性名列表</param>
        public SortedBindingList(IList<T> lsList,bool bF,params string[] aryNotSortStr)
        {
            m_lsList = lsList;

if (m_lsList is IBindingList)
            {
                m_bSupportsBinding = true;

m_lsBindingList = (IBindingList)m_lsList;

m_lsBindingList.ListChanged += new ListChangedEventHandler(SourceChanged);
            }

if (aryNotSortStr != null)
                m_aryNotSortStr = aryNotSortStr;
        }

/// <summary>
        /// 构造函数3,第二个参数是属性名且属性类型是string
        /// </summary>
        /// <param name="lsList">数据源</param>
        /// <param name="sPropertyName">指定不参与排序的属性名且属性类型只能是string,不支持其它类型</param>
        /// <param name="aryThisValueNotSort">第二个参数属性等于这些值时不参与排序</param>
        public SortedBindingList(IList<T> lsList, string sPropertyName, params string[] aryThisValueNotSort)
        {
            m_lsList = lsList;

if (m_lsList is IBindingList)
            {
                m_bSupportsBinding = true;

m_lsBindingList = (IBindingList)m_lsList;

m_lsBindingList.ListChanged += new ListChangedEventHandler(SourceChanged);
            }

m_objNotSortPro = null;

if (!String.IsNullOrEmpty(sPropertyName))
            {
                Type itemType = typeof(T);

foreach (PropertyDescriptor it in TypeDescriptor.GetProperties(itemType))
                {
                    if (it.Name == sPropertyName)
                    {
                        m_objNotSortPro = it;

break;
                    }
                }
            }

if (aryThisValueNotSort != null)
                m_aryThisValueNotSort = aryThisValueNotSort;
        }

/// <summary>
        /// 列表更改或列表中的项更改时发生时处理函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SourceChanged(object sender, ListChangedEventArgs e)
        {
            if (m_bSorted)
            {
                switch (e.ListChangedType)
                {
                    case ListChangedType.ItemAdded:

T newItem = m_lsList[e.NewIndex];

if (e.NewIndex == m_lsList.Count - 1)
                        {
                            object newKey;

if (m_objSortByPro != null)
                                newKey = m_objSortByPro.GetValue(newItem);
                            else
                                newKey = newItem;

if (m_objOrderDirect == ListSortDirection.Ascending)
                                m_lstSortIndex.Add(new ListItem(newKey, e.NewIndex));
                            else
                                m_lstSortIndex.Insert(0, new ListItem(newKey, e.NewIndex));

if (!m_bInitiatedLocally)
                                OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, SortedIndex(e.NewIndex)));
                        }
                        else
                            DoSort();
                        
                            break;

case ListChangedType.ItemChanged:

OnListChanged(new ListChangedEventArgs(ListChangedType.ItemChanged, SortedIndex(e.NewIndex), e.PropertyDescriptor));
                        
                        break;

case ListChangedType.ItemDeleted:
                        
                        if (!m_bInitiatedLocally)
                            DoSort();

break;

default:
                        if (!m_bInitiatedLocally)
                            DoSort();

break;
                }
            }
            else
                OnListChanged(e);
        }

#region IBindingList, IList<T> 成员

/// <summary>
        /// 对列有进行排序
        /// </summary>
        /// <param name="sPropertyName"></param>
        /// <param name="objDirection"></param>
        public void ApplySort(string sPropertyName, ListSortDirection objDirection)
        {
            m_objSortByPro = null;

if (!String.IsNullOrEmpty(sPropertyName))
            {
                Type itemType = typeof(T);

foreach (PropertyDescriptor it in TypeDescriptor.GetProperties(itemType))
                {
                    if (it.Name == sPropertyName)
                    {
                        m_objSortByPro = it;

break;
                    }
                }
            }

ApplySort(m_objSortByPro, objDirection);

}

/// <summary>
        /// 对列有进行排序--实现IBindingList接口
        /// </summary>
        /// <param name="objProperty"></param>
        /// <param name="objDirection"></param>
        public void ApplySort(PropertyDescriptor objProperty, ListSortDirection objDirection)
        {
            if (m_aryNotSortStr != null)
                foreach (string it in m_aryNotSortStr)
                    if (objProperty.Name == it)
                        return;

m_objSortByPro = objProperty;

m_objOrderDirect = objDirection;

// ===================================
            if (m_objNotSortPro != null && (m_aryThisValueNotSort != null || m_aryThisValueNotSort.Length > 0))
            {
                List<T> lsTemp = new List<T>();

var pExcept = from i in m_lsList where m_aryThisValueNotSort.Contains(m_objNotSortPro.GetValue(i).ToString()) select i;

lsTemp = pExcept.Cast<T>().ToList();

for (int i = 0; i < lsTemp.Count; i++)
                    m_lsList.RemoveAt(m_lsList.Count - 1);

DoSort();

foreach (T obj in lsTemp)
                    m_lsList.Add(obj);

//Dictionary<int, T> dicTemp = new Dictionary<int,T>();

//dicTemp.Clear();

//int i = 0;

//foreach (T obj in m_lsList)
                //{
                //    foreach (string it in m_aryThisValueNotSort)
                //        if (m_objNotSortPro.GetValue(obj).ToString() == it)
                //        {
                //            if (!dicTemp.ContainsKey(i))
                //                dicTemp.Add(i, obj);

//            break;
                //        }

//    i++;
                //}

//List<int> lsInt = dicTemp.Keys.ToList();

//lsInt.Sort();

//for (int j = 0; j < lsInt.Count; j++)
                //{
                //    m_lsList.RemoveAt(lsInt[j] - j);
                //}

//foreach (int nKey in dicTemp.Keys)
                //    m_lsList.Add(dicTemp[nKey]);

OnListChangedForIsSortLast(new ListChangedEventArgs(ListChangedType.Reset, 0));

return;
            }

// ============================
            if (m_bIsSortLast)
                DoSort();
            else
            {
                T objT = m_lsList[m_lsList.Count - 1];

m_lsList.RemoveAt(m_lsList.Count - 1);

DoSort();

m_lsList.Add(objT);
            }

if (m_bIsSortLast == false)
                OnListChangedForIsSortLast(new ListChangedEventArgs(ListChangedType.Reset, 0));

}

/// <summary>
        /// 返回具有给定 System.ComponentModel.PropertyDescriptor 的行的索引
        /// </summary>
        /// <param name="sPropertyName"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public int Find(string sPropertyName, object key)
        {
            PropertyDescriptor objFindProperty = null;

if (!String.IsNullOrEmpty(sPropertyName))
            {
                Type itemType = typeof(T);

foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(itemType))
                {
                    if (prop.Name == sPropertyName)
                    {
                        objFindProperty = prop;

break;
                    }
                }
            }

return Find(objFindProperty, key);

}

/// <summary>
        ///  激发ListChanged事件
        /// </summary>
        /// <param name="e"></param>
        protected void OnListChanged(ListChangedEventArgs e)
        {
            if (ListChanged != null)
                ListChanged(this, e);
        }

protected void OnListChangedForIsSortLast(ListChangedEventArgs e)
        {
            if (ListChangedForIsSortLast != null)
                ListChangedForIsSortLast(this, e);
        }

/// <summary>
        /// 返回具有给定 System.ComponentModel.PropertyDescriptor 的行的索引--实现IBindingList接口
        /// </summary>
        /// <param name="property"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public int Find(PropertyDescriptor objProperty, object objKey)
        {
            if (m_bSupportsBinding)
                return SortedIndex(m_lsBindingList.Find(objProperty, objKey));
            else
                return -1;
        }

/// <summary>
        /// 撤销排序--实现IBindingList接口
        /// </summary>
        public void RemoveSort()
        {
            UndoSort();
        }

/// <summary>
        /// 添加到用于搜索的索引--实现IBindingList接口
        /// </summary>
        /// <param name="objProperty"></param>
        public void AddIndex(PropertyDescriptor objProperty)
        {
            if (m_bSupportsBinding)
                m_lsBindingList.AddIndex(objProperty);
        }

/// <summary>
        /// 将新项添加到列表--实现IBindingList接口
        /// </summary>
        /// <returns></returns>
        public object AddNew()
        {
            object result;

if (m_bSupportsBinding)
            {
                m_bInitiatedLocally = true;

result = m_lsBindingList.AddNew();

m_bInitiatedLocally = false;

OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, m_lsBindingList.Count - 1));
            }
            else
                result = null;

return result;
        }

/// <summary>
        /// 获取是否可更新列表中的项--实现IBindingList接口
        /// </summary>
        public bool AllowEdit
        {
            get
            {
                if (m_bSupportsBinding)
                    return m_lsBindingList.AllowEdit;
                else
                    return false;
            }
        }

/// <summary>
        /// 获取是否可以使用 System.ComponentModel.IBindingList.AddNew() 向列表中添加项--实现IBindingList接口
        /// </summary>
        public bool AllowNew
        {
            get
            {
                if (m_bSupportsBinding)
                    return m_lsBindingList.AllowNew;
                else
                    return false;
            }
        }

/// <summary>
        /// 获取是否可以使用 System.Collections.IList.Remove(System.Object) 或 System.Collections.IList.RemoveAt(System.Int32)
        /// 从列表中移除项。--实现IBindingList接口
        /// </summary>
        public bool AllowRemove
        {
            get
            {
                if (m_bSupportsBinding)
                    return m_lsBindingList.AllowRemove;
                else
                    return false;
            }
        }

/// <summary>
        /// 从用于搜索的索引中移除 System.ComponentModel.PropertyDescriptor--实现IBindingList接口
        /// </summary>
        /// <param name="property"></param>
        public void RemoveIndex(PropertyDescriptor property)
        {
            if (m_bSupportsBinding)
                m_lsBindingList.RemoveIndex(property);
        }

public ListSortDirection SortDirection
        {
            get
            {
                return m_objOrderDirect;
            }
        }

public PropertyDescriptor SortProperty
        {
            get
            {
                return m_objSortByPro;
            }
        }

/// <summary>
        /// 获取当列表更改或列表中的项更改时是否引发 System.ComponentModel.IBindingList.ListChanged 事件
        /// </summary>
        public bool SupportsChangeNotification
        {
            get
            {
                return true;
            }
        }

public bool SupportsSearching
        {
            get
            {
                if (m_bSupportsBinding)
                    return m_lsBindingList.SupportsSearching;
                else
                    return false;
            }
        }

public bool SupportsSorting
        {
            get
            {
                return true;
            }
        }

/// <summary>
        /// 添加项
        /// </summary>
        /// <param name="item"></param>
        public void Add(T item)
        {
            m_lsList.Add(item);
        }

/// <summary>
        /// 清空所有
        /// </summary>
        public void Clear()
        {
            m_lsList.Clear();
        }

/// <summary>
        /// 是否含有某项
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public bool Contains(T item)
        {
            return m_lsList.Contains(item);
        }

/// <summary>
        /// 移除某项
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public bool Remove(T item)
        {
            return m_lsList.Remove(item);
        }

/// <summary>
        /// 是否只读
        /// </summary>
        public bool IsReadOnly
        {
            get
            {
                return m_lsList.IsReadOnly;
            }
        }

/// <summary>
        /// 取得某项索引
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public int IndexOf(T item)
        {
            return SortedIndex(m_lsList.IndexOf(item));
        }

public void Insert(int index, T item)
        {
            m_lsList.Insert(index, item);
        }

public T this[int index]
        {
            get
            {
                if (m_bSorted)
                    return m_lsList[OriginalIndex(index)];
                else
                    return m_lsList[index];
            }
            set
            {
                if (m_bSorted)
                    m_lsList[OriginalIndex(index)] = value;
                else
                    m_lsList[index] = value;
            }
        }

int System.Collections.IList.IndexOf(object value)
        {
            return IndexOf((T)value);
        }

void System.Collections.IList.Insert(int index, object value)
        {
            Insert(index, (T)value);
        }

/// <summary>
        /// 移除指定索引的项
        /// </summary>
        /// <param name="index"></param>
        public void RemoveAt(int index)
        {
            if (m_bSorted)
            {
                m_bInitiatedLocally = true;
                int baseIndex = OriginalIndex(index);

m_lsList.RemoveAt(baseIndex);

if (m_lsList.Count != m_lstSortIndex.Count)
                {
                    if (m_objOrderDirect == ListSortDirection.Ascending)
                        m_lstSortIndex.RemoveAt(index);
                    else
                        m_lstSortIndex.RemoveAt(m_lstSortIndex.Count - 1 - index);

foreach (ListItem item in m_lstSortIndex)
                        if (item.BaseIndex > baseIndex)
                            item.BaseIndex -= 1;
                }

OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, index));
                m_bInitiatedLocally = false;
            }
            else
                m_lsList.RemoveAt(index);
        }

int System.Collections.IList.Add(object value)
        {
            Add((T)value);

return SortedIndex(m_lsList.Count - 1);
        }

bool System.Collections.IList.Contains(object value)
        {
            return Contains((T)value);
        }

bool System.Collections.IList.IsFixedSize
        {
            get
            {
                return false;
            }
        }

object System.Collections.IList.this[int index]
        {
            get
            {
                return this[index];
            }
            set
            {
                this[index] = (T)value;
            }
        }

void System.Collections.IList.Remove(object value)
        {
            Remove((T)value);
        }

#endregion

#region 取得List中的Item的位置

/// <summary>
        /// 用排序后的位置取得未排序前的位置
        /// </summary>
        /// <param name="nSortedIndex"></param>
        /// <returns></returns>
        private int OriginalIndex(int nSortedIndex)
        {
            if (m_bSorted)
            {
                if (m_objOrderDirect == ListSortDirection.Ascending)
                    return m_lstSortIndex[nSortedIndex].BaseIndex;
                else
                    return m_lstSortIndex[m_lstSortIndex.Count - 1 - nSortedIndex].BaseIndex;
            }
            else
                return nSortedIndex;
        }

/// <summary>
        /// 用排序前的位置取得排序后的位置
        /// </summary>
        /// <param name="nOriginalIndex"></param>
        /// <returns></returns>
        private int SortedIndex(int nOriginalIndex)
        {
            int result = 0;

if (m_bSorted)
            {
                for (int index = 0; index < m_lstSortIndex.Count; index++)
                {
                    if (m_lstSortIndex[index].BaseIndex == nOriginalIndex)
                    {
                        result = index;

break;
                    }
                }

if (m_objOrderDirect == ListSortDirection.Descending)
                    result = m_lstSortIndex.Count - 1 - result;
            }
            else
                result = nOriginalIndex;

return result;

}

#endregion

#region 排序/撤销排序

/// <summary>
        /// 排序
        /// </summary>
        private void DoSort()
        {
            int index = 0;

m_lstSortIndex.Clear();

if (m_objSortByPro == null)
            {
                foreach (T obj in m_lsList)
                {
                    m_lstSortIndex.Add(new ListItem(obj, index));

index++;
                }
            }
            else
            {
                foreach (T obj in m_lsList)
                {
                    m_lstSortIndex.Add(new ListItem(m_objSortByPro.GetValue(obj), index));

index++;
                }
            }

m_lstSortIndex.Sort();

m_bSorted = true;

OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, 0));

}

/// <summary>
        /// 撤销排序
        /// </summary>
        private void UndoSort()
        {
            m_lstSortIndex.Clear();

m_objSortByPro = null;

m_objOrderDirect = ListSortDirection.Ascending;

m_bSorted = false;

OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, 0));

}

#endregion

#region IEnumerable与IEnumerable<T> 成员

IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

public IEnumerator<T> GetEnumerator()
        {
            if (m_bSorted)
                return new SortedEnumerator(m_lsList, m_lstSortIndex, m_objOrderDirect);
            else
                return m_lsList.GetEnumerator();
        }

#endregion

#region ICollection与ICollection<T> 成员

public int Count
        {
            get
            {
                return m_lsList.Count;
            }
        }

bool System.Collections.ICollection.IsSynchronized
        {
            get
            {
                return false;
            }
        }

object System.Collections.ICollection.SyncRoot
        {
            get
            {
                return m_lsList;
            }
        }

public void CopyTo(T[] array, int arrayIndex)
        {
            m_lsList.CopyTo(array, arrayIndex);
        }

void System.Collections.ICollection.CopyTo(System.Array array, int index)
        {
            CopyTo((T[])array, index);
        }

#endregion

#region ICancelAddNew 成员

void ICancelAddNew.CancelNew(int itemIndex)
        {
            ICancelAddNew can = m_lsList as ICancelAddNew;
            if (can != null)
                can.CancelNew(itemIndex);
            else
                m_lsList.RemoveAt(itemIndex);
        }

void ICancelAddNew.EndNew(int itemIndex)
        {
            ICancelAddNew can = m_lsList as ICancelAddNew;
            if (can != null)
                can.EndNew(itemIndex);
        }

#endregion

#region SortedEnumerator 类

private class SortedEnumerator : IEnumerator<T>
        {
            private IList<T> m_list;

private List<ListItem> m_sortIndex;

private ListSortDirection m_sortOrder;

private int m_nIndex;

private bool _disposedValue = false;

public SortedEnumerator(IList<T> list, List<ListItem> sortIndex, ListSortDirection direction)
            {
                m_list = list;

m_sortIndex = sortIndex;

m_sortOrder = direction;

Reset();
            }

public T Current
            {
                get
                {
                    return m_list[m_sortIndex[m_nIndex].BaseIndex];
                }
            }

Object System.Collections.IEnumerator.Current
            {
                get
                {
                    return m_list[m_sortIndex[m_nIndex].BaseIndex];
                }
            }

public bool MoveNext()
            {
                if (m_sortOrder == ListSortDirection.Ascending)
                {
                    if (m_nIndex < m_sortIndex.Count - 1)
                    {
                        m_nIndex++;
                        return true;
                    }
                    else
                        return false;
                }
                else
                {
                    if (m_nIndex > 0)
                    {
                        m_nIndex--;
                        return true;
                    }
                    else
                        return false;
                }
            }

public void Reset()
            {
                if (m_sortOrder == ListSortDirection.Ascending)
                    m_nIndex = -1;
                else
                    m_nIndex = m_sortIndex.Count;
            }

#region IDisposable 实现

protected virtual void Dispose(bool disposing)
            {
                if (!_disposedValue)
                {
                    if (disposing)
                    {
                    }
                }
                _disposedValue = true;
            }

public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }

~SortedEnumerator()
            {
                Dispose(false);
            }

#endregion

}

#endregion

#region ListItem 类

private class ListItem : IComparable<ListItem>
        {
            private object m_objKey;

private int m_nBaseIndex;

public object Key
            {
                get
                {
                    return m_objKey;
                }
            }

public int BaseIndex
            {
                get
                {
                    return m_nBaseIndex;
                }
                set
                {
                    m_nBaseIndex = value;
                }
            }

public  ListItem(object objKey, int nBaseIndex)
            {
                m_objKey = objKey;

m_nBaseIndex = nBaseIndex;
            }

// 实现IComparable接口
            public int CompareTo(ListItem other)
            {
                object target = other.Key;

if (Key is IComparable)
                    return ((IComparable)Key).CompareTo(target);

else
                {
                    if (Key == null)
                    {
                        if (target == null)
                            return 0;
                        else
                            return -1;
                    }
                    else if (Key.Equals(target))
                        return 0;
                    else
                        return Key.ToString().CompareTo(target.ToString());
                }
            }

public override string ToString()
            {
                return Key.ToString();
            }

}

#endregion
    }
}

使用 SortedBindingList<CashInCome> m_lsSort = new SortedBindingList<CashInCome>(dtBind);

转载于:https://www.cnblogs.com/z2002m/archive/2010/02/23/1671978.html

排序类.不管什么类型都能排相关推荐

  1. 06-void类型和never类型

    void类型和never类型都是ts新增的类型,这两者的共同点是都常见用于声明函数的返回值的类型,这里我们把它们两放在一起介绍有助于大家区分. void,表示函数返回值空,即undefined. ne ...

  2. JS-9 JS常见内置类;包装类型;Number类方法与实例方法;Math方法;String类常见方法;数组方法(增删改查+遍历+排序);时间Date 构造函数+获取信息+设置信息+获取Unix时间戳

    目录 1_包装类型 2_Number类补充 3_Math对象 4_String类的补充 4.1_基本使用 4.2_修改字符串 4.3_查找.替换字符串 开头与结尾 4.4_获取子字符串 4.5_其他方 ...

  3. 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序

    [排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...

  4. 文盲的Python入门日记:第六天,继续完善我们的MsSql类,支持查询结果的筛选和排序,以及日期类型

    文盲的Python入门日记:第一天,Python环境搭建 文盲的Python入门日记:第二天,连接到mssql和python代码书写初体验 文盲的Python入门日记:第三天,用一些小练习感受一下py ...

  5. Ordering 排序类 - Google Guava

    一.Ordering排序类简介 排序器 Ordering 是 Guava流畅风格比较器 Comparator 的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能. 从实现上说,Ordering ...

  6. 冒泡排序实现与性能优化及JDK排序类分享

    开心一笑 [我现在出门都得带口罩,要不然就嗓子疼还咳嗽,想吸一口新鲜空气真的是太难了,估计以后纯净的空气得比红酒还值钱啊.那些有钱人出门都得背个空气瓶,见面就问:哎呦,王总啊,你的是几几年的空气啊?王 ...

  7. 实体类中用基本类型好,还是用包装类型

    实体类中用基本类型好,还是用包装类型好? 如果您也考虑这个问题欢迎指正我的观点,如果您正在考虑这个问题,欢迎评论一起讨论一下这个问题 刚才又想到了关于module或者实体类的建立的问题,用基本类型(i ...

  8. python里的类与一切事物都是对象

    对于python,一切事物都是对象,对象基于类创建 列如 name='csdcs' li=[1,3,43] 上面两个都是对象,因为它们都是python中的 类里面存着许多的功能,功能的集合,     ...

  9. 第4章 类型基础 -- 4.1 所有类型都从System.Object派生

    4.1 所有类型都从System.Object派生 "运行时"要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个 ...

最新文章

  1. hadoop1.2.1安装配置
  2. 基于React脚手架集成Cesium
  3. vue+iview后台管理模板
  4. 百度回应2015年的“复旦视频”:不要让当年唱歌的学生面对舆论压力
  5. 读书笔记: 博弈论导论 - 05 - 完整信息的静态博弈 纳什均衡
  6. 《程序员修炼之道》解读
  7. ionic2中的订单详情页面
  8. 关于即将到来的软件行业的降维打击的几点想法
  9. 【Cesium】加载互联网地图服务——高德地图
  10. 酷6 期待“化茧成蝶”
  11. C语言Matrix编程题——[Recursion]D. Liang 8.1 Computing factorials
  12. IDEA 解决 artifacts not found 问题
  13. 01_搭建百度apollo环境实操可用
  14. c语言实现hdr图像合成,怎样完成一张HDR照片的拍摄与合成
  15. 为什么好学生,学不好编程?
  16. 取供应商类型所在的快码
  17. Keil MDK入门---从新建一个工程开始
  18. Chrome 开发工具指南
  19. 美元指数展现王者风范 国际黄金重返下跌通道
  20. 计网第四章 网络层(咕咕咕)

热门文章

  1. 执行虚拟化软件测试程序的物理机,虚拟化技术试题教案.docx
  2. 截取文件最后10行_10 行 Python 代码自动清理电脑内重复文件,解放双手
  3. mysql 批量插入数据
  4. 将Maven创建的web Servlet2.3工程改为Servlet3.0
  5. 5G格局剧变!苹果高通和解,英特尔退票出局,华为独善其身
  6. 据说,上海AI产业规模700亿,包揽全国1/3人才
  7. CES上那些卖萌耍酷的家用机器人究竟怎么样?还是不太懂人话
  8. 阿里AI两项技术刷新行业纪录,为城市大脑,OR也为无人车?
  9. 毕啸南专栏 | 对话李开复:AI科学家的转型之路
  10. Resharper上手指南转